Конструкторы – вызываются при создании нового обьекта. Задача – инициализация обьекта, т.е. дать нач. знач. для всех его полей. -Имя констр. совпадает с именем класса.
⇐ ПредыдущаяСтр 5 из 5 -Не задается тип возвр. значения. -М.б. перегружен. -Не наследуются –Не м.б. виртуальной функцией. class A{ public: int a; A(){a=0;}; A(int x){a=x;}} Eсли нет конструкт.-’’конструктор по умолчанию'' int main(){ A x, y(10);} Деструкторы - вызывается перед уничтожением любого обьекта. При выходе обьекта из области видимости вызывается деструктор. ~ <имя класса>(){}; Для класса м.б. вызван только 1 деструктор. Если деструктор явно не созд. - его создает компилятор. Конструктор копирования – вызывается если созданный обьект должен быть копией уже существующ. обьекта того же класса. –Конструктор с одним аргументом, ссылкой на обьект своего класса. class A{ int a; A(){a=0;}; A(A& x){a=x.a;}; Операция присваивания A operator = (A a2){ a1=a2; // = a1.operator=(a2);} Конструкторы преобразования. – используется для того чтобы объект чужого класса превратить в объект нашего класса. К.п. – это констр. с 1им аргументом. Тип аргумента-чужой тип, который. преобраз. в объект нашего класса. Class A{ int a; A(int x=0)!!!{a=х};} void f(A x); int main(){ f(5); A x(10); - разрешено т.к. есть преобразование.!!! Приведе́ние ти́па — преобразование значения переменной одного типа в значение другого типа. int X; int Y = 200; char C = 30; X = (int)C * 10 + Y; //переменная С приведена к типу int.Операции new и delete для класса - Если для класса явно не заданы, то можно исп. стандартные версии: new:-выделяет память в куче,-вызывает конструктор delete:-освобождает память,-вызов деструктора void *operator new(int size){return malloc(size);} void operator delete(void *p){free(p);}
Конструкторы преобразования и операции присваивания типа. Поля и методы класса в целом.
Общая структура программы на C++ Общая структура программы на java 5) Константные объекты класса. Константные методы. Ключевое слово mutable. Пример реализации двусвязного списка с помощью классов.
Для константных объектов запрещен вызов не константных методов класса. Константный метод в общем случае не может изменять значение полей класса. Константные методы можно вызывать для неконстантных объектов класса. class A{int a; int getA() const{return a;}} mutable int a; -отмечает те поля, знач которых int main() { const A x; можно изменять в константных методах. int x=getA();} Пример реализации двусвязного списка с помощью классов. list.h сlass List{struct Node{ int key; char *data; Node *prev,*next;} public: List(); ~List(); List(List&);//констр. копиров. List & operator=(List&); void add(int key,char *data); void delNode(int key); void*find(int key); void show(); void delllist(); private: Note*findNode(int key); В открытой части List, нигде не используется класс Node
list.cpp #include “list.h” #include “iostream” using namespace std; List::List(){first=0;} List::~List(){delist();} int List::Node::findNode(int key){Node*tmp=first; while(tmp){if(tmp->key==key) return key; tmp=tmp->next} return 0;} void List::show(){Node *tmp=first; while(tmp){cout<<tmp->key<<”. “ <<tmp->data<<endl;} tmp=tmp->netx;}
6) Статические поля и методы класса. Class A { public: static int i;} /* Обязательно нужно проинициализировать */ int A::i = 0; int main(){ A::i = 1;} Статические методы не привязаны к объектам класса, за счет того, что им не пережается скрытый указатель this. Поэтому статические методы можно вызывать даже если нет ни одного объекта класса. В статических методах из-за отсутствия this нет возможности на прямую обращатся к нестатическим полям и методам класса. Если поле объявлено статич., оно ведет себя как внешняя переменная. Размещается в сегменте данных и существует в единств. экземпляре, независимо от того сколько задано обьектов. Статическое поле существует даже если нет обьектов. Статич. поле по умолчанию обнуляется.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|