유형

2012-07-03 2 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

처음 두 줄은 객체가 생성되기 때문에 복사 생성자를 호출합니다. 마지막 행은 equals 연산자를 호출하여 할당을 수행합니다.

1

클래스에 명시 적 복사 생성자가 없기 때문에 위의 모든 명령문을 사용하면 얕은 사본이됩니다. 당신이 복사 생성자를 선언 = 연산자 다음

를 오버로드 한 경우

A (B)와 A = B가 호출을 발생시키는 복사 생성자와

A = B를 호출 발생합니다 = 이러한이 암시 적으로생성 사용하십시오 더 이해

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

에 대한 운영자

에게 읽기 this 오버로드.

a = b; 

이 하나가 assignment operator를 사용하고, 그것이 A 객체를 생성하지 않기 때문에 그것은, 하지 초기화이다 : 그것은 단지 기존에 새로운 가치를 제공합니다. 복사 생성자는 서명과 같은

A(const A&); 

과 수업이 제공하지 않기 때문에, 컴파일러를 합성 그냥 복사 데이터 멤버

A& operator=(const A&); 

대입 연산자를했을

.