Сообщения без ответов | Активные темы Текущее время: 25 ноя 2017, 17:08



Ответить на тему  [ 1 сообщение ] 
 Шпора по С++ 
Автор Сообщение
Администратор
Аватара пользователя

Зарегистрирован: 18 янв 2012, 01:25
Сообщения: 688
Откуда: Первоуральск (Екатеринбург)
Недостаток процедурно-ориентированных (Паскаль, С, Fortran) языков
1. Неограниченность доступа функций к глобальным данным.
2. Данные и функции в проекте "географически" находятся в разных местах, что плохочитабельно и не отображает картину "реального мира"

Объекто ориентированное программирование
Пример описания реального мира:
Свойства объекта <=> характеристика объекта (для людей - цвет глаз, рост, вес, возраст и тп., для машин - марка, мощность, тип двигателя и пр)
Поведение <=> реакция объекта на воздействие (нажали на тормоз, машина остановилась; спросили у боса о повышени, он ответил "да" или "нет")- функция (МЕТОДЫ В С++)
Объект = характеристика объекта (свойства объекта) + реакция на воздействие (функция, методы) - объектно ориентированное программирование.

ОБЪЕКТ, КЛАСС, ЭКЗЕМПЛЯР.
Таким образом класс - это шаблон, а экземпляр класса - конкретная реализация шаблона. А вот уже экземпляры класса являются объектами, то есть конкретными элементами, хранящими конкретные значения.
экземпляр класса <=> объект.

Пример программы:

Код:
class MyClass      //определение класса
 {
    private:      //приватные данные/функции, скрытые данные/функции, нельзя изменить, нет прямого доступа, только из метода (функции) данного класса
      int somedata;    //поле данных класса, член класса, описание класса, данные класса, которые нельзя изменить прямым доступом
                  //"глобальные переменные" класса, необходимые при работе с методами (функциями) данного класса
   
    public:      //общедоступные данные/функции, общее, есть доступ
      void setdata (int d) //метод класса, функция изменяющая значение поля данных класса
         {somedata=d;}
      
      void showdata()      //метод класса, функция отображающая значение поля данных класса
         {count<<"Значение поля равно "<<somedata<<endl}
 };
/////////////////////////////////////////////////////
 int main ()
 {
    MyClass s1,s2;       //определение двух объектов класса MyClass s1 и s2 (экземпляров класса MyClass)
   
    s1.setdata (901);    //вызов метода setdata(int d) класса MyClass объектом класса s1 => d=901 => somedata=901 в объекте класса s1     
    s2.setdata (101);    //вызов метода setdata(int d) класса MyClass объектом класса s2 => d=101 => somedata=101 в объекте класса s2
   
    s1.showdata();     //вызов метода showdata() класса MyClass объектом s1 => "Значение поля равно 901"
    s2.showdata();      //вызов метода showdata() класса MyClass объектом s2 => "Значение поля равно 101"
    return 0;
 }



ИНКАПСУЛЯЦИЯ
Если необходимо считать или изменить какие-либо данные объекта, нужно вызвать соответствующий метод (может быть несколько), который выполнит считывание/изменение и возвратит требуемое значение. Прямой доступ к данным невозможен! Это и есть ИНКАПСУЛЯЦИЯ!
Типичная программа на с++ состоит из большого количества объектов взаимодействующих между собой посредствам вызова методов (функций) друг друга, так как прямой доступ к данным объекта невозможен.

НАСЛЕДОВАНИЕ
Подкласс (производные класса)=свойства класса (базовый класс)+собственные свойства подкласса (производные класса)
class CountDn : public Counter
class CountDn - наследник класса Counter, подкласс, потомок.
public Counter - базовый класс, надкласс, родитель.

КОНСТРУКТОР
Предназначен для инициализации поля данных объектов класса при создании объекта класса. Имя конструктора должно в точности совпадать с именем класса!
У конструктора нет возвращаемого значения! стр 227
Пример:

ДЕСТРУКТОР
Вызывается при уничтожении объекта класса. Необходим для освобождения памяти выделенной конструктором. Имеет такое же имя как и конструктор, сопровождаемое "~"

ВНЕШНЯЯ ФУНКЦИЯ КЛАССА, ОПРЕДЕЛЕНИЕ ФУНКЦИИ ВНЕ КЛАССА.
void Distance::add_dist(Distance d2, Distance d3)

void - возвращаемый тип объекта класса
Distance - имя класса
:: - операция глобального разрешения, разрешает определение метода (функции) вне класса
add_dist - имя функции
Distance d2, Distance d3 - аргументы функции


PUBLIC, PROTECTED,PRIVATE
Код:
 
|Снецификатор|Доступ из класса|Доступ из производных класса|Доступ из внешних классов и функций|
   public:      Есть               Есть                     Есть      
   protected:           Есть               Есть                     Нет
   private:       Есть               Нет                     Нет



АДРЕСА И УКАЗАТЕЛИ
& - ссылка на переменную в аргументах функции, используется если из функции надо возвратить несколько значений
& - адрес переменной
указатель - переменная хранящая в себе значение адреса
int* iptr - указатель на целую переменную, класс,
iptr=&var1 - помещаем в переменную iptr адрес переменной var1
var2=*iptr - взять значение переменной на которую указывает указатель

УПРАВЛЕНИЕ ПАМЯТЬЮ "new" и "delete"
new - универсальная операция, получающая память у операционной системы и возвращающая указатель на начало выделенного блока.
delete - освобождает выделенный участк памяти, возвращая его операционной системе
-> - операция используемая для доступа к методам объекта, созданного с помощью оперции new

_________________
cайт: http://yourdevice.net/
форум: http://yourdevice.net/forum/


05 май 2017, 05:46
Профиль ICQ WWW
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ 1 сообщение ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron


Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.
Русская поддержка phpBB