Шпора по С++
Добавлено: 05 май 2017, 05:46
Недостаток процедурно-ориентированных (Паскаль, С, Fortran) языков
1. Неограниченность доступа функций к глобальным данным.
2. Данные и функции в проекте "географически" находятся в разных местах, что плохочитабельно и не отображает картину "реального мира"
Объекто ориентированное программирование
Пример описания реального мира:
Свойства объекта <=> характеристика объекта (для людей - цвет глаз, рост, вес, возраст и тп., для машин - марка, мощность, тип двигателя и пр)
Поведение <=> реакция объекта на воздействие (нажали на тормоз, машина остановилась; спросили у боса о повышени, он ответил "да" или "нет")- функция (МЕТОДЫ В С++)
Объект = свойства объекта (характеристика объекта) + поведение ( реакция на воздействие (функция, методы)) - объектно ориентированное программирование.
ОБЪЕКТ, КЛАСС, ЭКЗЕМПЛЯР.
Таким образом класс - это шаблон, а экземпляр класса - конкретная реализация шаблона. А вот уже экземпляры класса являются объектами, то есть конкретными элементами, хранящими конкретные значения.
экземпляр класса <=> объект.
Пример программы:
ИНКАПСУЛЯЦИЯ
Если необходимо считать или изменить какие-либо данные объекта, нужно вызвать соответствующий метод (может быть несколько), который выполнит считывание/изменение и возвратит требуемое значение. Прямой доступ к данным невозможен! Это и есть ИНКАПСУЛЯЦИЯ!
Типичная программа на с++ состоит из большого количества объектов взаимодействующих между собой посредствам вызова методов (функций) друг друга, так как прямой доступ к данным объекта невозможен.
НАСЛЕДОВАНИЕ
Подкласс (производные класса)=свойства класса (базовый класс)+собственные свойства подкласса (производные класса)
class CountDn - наследник класса Counter, подкласс, потомок.
: - наследование
public Counter - базовый класс, надкласс, родитель.
КОНСТРУКТОР
Предназначен для инициализации поля данных объектов класса при создании объекта класса. Имя конструктора должно в точности совпадать с именем класса!
У конструктора нет возвращаемого значения! стр 227
Пример:
ДЕСТРУКТОР
Вызывается при уничтожении объекта класса. Необходим для освобождения памяти выделенной конструктором. Имеет такое же имя как и конструктор, сопровождаемое "~"
ВНЕШНЯЯ ФУНКЦИЯ КЛАССА, ОПРЕДЕЛЕНИЕ ФУНКЦИИ ВНЕ КЛАССА.
void - возвращаемый тип объекта класса
Distance - имя класса
:: - операция глобального разрешения, разрешает определение метода (функции) вне класса
add_dist - имя функции
Distance d2, Distance d3 - аргументы функции
PUBLIC, PROTECTED,PRIVATE
АДРЕСА И УКАЗАТЕЛИ
& - ссылка на переменную в аргументах функции, используется если из функции надо возвратить несколько значений
& - адрес переменной
указатель - переменная хранящая в себе значение адреса
int* iptr - указатель на целую переменную, класс,
iptr=&var1 - помещаем в переменную iptr адрес переменной var1
var2=*iptr - взять значение переменной на которую указывает указатель
УПРАВЛЕНИЕ ПАМЯТЬЮ "new" и "delete"
new - универсальная операция, получающая память у операционной системы и возвращающая указатель на начало выделенного блока.
delete - освобождает выделенный участк памяти, возвращая его операционной системе
-> - операция используемая для доступа к методам объекта, созданного с помощью оперции new
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
: - наследование
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