
- •Конструкторы копии и параметры функции
- •Указатель this
- •Встраиваемые (inline-функции)
- •Функции-друзья (friend)
- •Перегрузка операторов с использованием функций-членов класса
- •Перегрузка операторов отношения и логических операторов
- •Перегрузка операторов ввода-вывода
- •Основная форма наследования
- •Множественное наследование
- •Передача параметров конструкторам базового класса
- •Виртуальные базовые классы
- •Виртуальные функции
Конструкторы копии и параметры функции
Пусть имеется класс
class myclass {
int *p; // закрытый член – указатель на целое
public:
myclass(int i); // обычный конструктор с параметром
~myclass( ); // деструктор
int getval( ) {return *p}
};
myclass::myclass(int i)
{
cout<<”Выделение памяти в динамической области”<<endl;
p=new int;
*p=i;
}
myclass::~myclass( )
{
cout<<”Освобождение памяти”<<endl;
delete p;
}
и определена функция с параметром
void display(myclass ob)
{
cout<<ob.getval( )<<endl;
}
int main( ) // главная функция
{
myclass a(10);
display(a);
return 0;
}
| |
ориги-нальный объект объект-копия
int *p int *p
Без конструтора копирования
|
ориги-нальный объект объект-копия
int *p int *p
С конструтором копирования
|
Общий вид конструктора копирования:
имя_класса (const имя_класса &obj) { //тело конструктора }
где obj – ссылка на объект |
Дополним класс myclass
myclass(const myclass &ob); // конструктор копии в описание класса
Реализация конструктора копирования
myclass:: myclass (const myclass &obj)
{
p=new int;
p=obj.p; // значение копии
cout<< “Вызван конструктор копии”<<endl;
}
Указатель this
|
class x {
int m;
public:
int readm() { return m; }
void writem(int y) {m=y;}
};
x aa;
x bb;
void f()
{
int a = aa.readm();
int b = bb.readm();
...
}
В первом вызове функции-члена readm() член m относится к aa.m, а во втором - к bb.m. Указатель на объект, для которого вызвана функция-член, является скрытым параметром функции. На этот неявный параметр можно ссылаться явно как на this. В каждой функции класса x указатель this неявно описан как
x * this;
и инициализирован так, что он указывает на объект, для которого была вызвана функция член.
Пример использования this
class x {
int m;
public:
int readm() { return this->m; }
};