2012-07-03 4 views
0

Можно создать дубликат:
Is there a difference in C++ between copy initialization and direct initialization?Типы в конструктор копирования

Class A 
{ 
public: 
    //some member function call 
private: 
    int x; 
    char a; 
}; 
int main() 
{ 
    A a; 
    A b; 
} 

Привет Вы можете сказать мне в разнице в между этими когда я звоню или инициализировать объекты указанного класса, как

A a(b); 
A a=b; 
a=b; 
+1

Это домашнее задание;)? –

+1

код не компилируется –

ответ

3

Первые 2 строки называет конструктор копирования, потому что объекты строятся. Последняя строка вызовет оператор equals для выполнения задания.

1

Поскольку ваш класс не имеет явного конструктора копирования, все приведенные выше утверждения приводят к мелкой копии.

Если вы объявили конструктор копирования и перегруженный оператор = то

А (Ь) и А = Ь приведет вызов конструктора копирования и

а = Ь приведет вызова в = перегружен оператор

Read this для большего понимания

2
A a(b); 
A a = b; 

Они используют неявно генерируемой copy constructor.

a = b; 

Это один использует assignment operator, и это не инициализация, так как он не создает A объекта: он просто дает новое значение существующему.

Конструктор копирования будет иметь подписи, такие как

A(const A&); 

и оператор присваивания

A& operator=(const A&); 

Поскольку ваш класс не дает, компилятор синтезирует их и просто копирует элементы данных ,

Смежные вопросы