![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Инициализация объекта другим объектом того же класса называется почленной инициализацией по умолчанию. Копирование одного объекта в другой выполняется путем последовательного копирования каждого нестатического члена и осуществляется конструктором копирования. Вместе с конструктором умолчания, конструктор копирования входит в обязательный набор конструкторов для любого класса. Реализация механизма копирования значений для транслятора не является неразрешимой задачей. Конструктор копирования всего лишь создает копии объектов. Этот процесс реализуется при помощи стандартного программного кода. И построить такой код транслятор способен самостоятельно.
class x { //………};x a;x b=a; x c(a); x d=x(a);Проектировщик класса может изменить такое поведение, предоставив специальный копирующий конструктор. Если он определен, то вызывается всякий раз, когда один объект инициализируется другим объектом того же класса.
Часто почленная инициализация не обеспечивает корректного поведения класса. Поэтому мы явно определяем копирующий конструктор. Копирующий конструктор принимает в качестве формального параметра ссылку на объект класса (традиционно объявляемую со спецификатором const).
class x { //………public: x(const x &t); //………};Пример:
#include <stdio.h>class A{public: int* a, N; A(int); void print();};A::A(int n){ a=new int[n]; N=n; for(int i=0;i<N;i++) a[i]=i;}void A::print(){ for(int i=0;i<N;i++) printf("%d ", a[i]); printf("\n");}class B{public: int* a, N; B(int); B(const B&); void print();};B::B(int n){ a=new int[n]; N=n; for(int i=0;i<N;i++) a[i]=i;}B::B(const B &v){ N=v.N; a=new int[N]; for(int i=0;i<N;i++) a[i]=v.a[i];}void B::print(){ for(int i=0;i<N;i++) printf("%d ", a[i]); printf("\n");}int main(int argc, char* argv[]){ A a1(3); A a2=a1; a2.a[1]=8; printf("Object a1 - "); a1.print(); printf("Object a2 - "); a2.print(); B b1(3); B b2=b1; b2.a[1]=8; printf("Object b1 - "); b1.print(); printf("Object b2 - "); b2.print(); getchar(); return 0;}Вывод:
Object a1 - 0 8 2Object a2 - 0 8 2Object b1 - 0 1 2Object b2 - 0 8 2Дата публикования: 2015-01-13; Прочитано: 284 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!