Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Конструкторы – вызываются при создании нового обьекта. Задача – инициализация обьекта, т.е. дать нач. знач. для всех его полей. -Имя констр. совпадает с именем класса.




-Не задается тип возвр. значения. -М.б. перегружен. -Не наследуются –Не м.б. виртуальной функцией. 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...