2011-03-16 3 views
3

"구성원을 복사하는"개념을 배우면서이 책은 다음 진술을 제공합니다.클래스의 구성원 복사

또한 정적 할당 멤버가 참조, const 또는 복사 지정이없는 사용자 정의 유형 인 경우 기본 할당을 생성 할 수 없습니다.

나는이 진술이 실제로 전달하고자하는 것이 무엇인지 이해하지 못합니까? 아니면이 시나리오가 어떤 종류의 시나리오를 언급합니까? 감사.

+1

어떤 책인가요? –

답변

2

이 문은 컴파일러가 자동으로 (즉, 사용자 정의 형식) 쓰기 클래스에 대한 기본 할당 연산자 함수를 생성과 관련이있다. 기본 할당은 모든 구성원을 새 인스턴스로 복사하여 작동합니다. 이 성명서는 기본 할당이 이 아닌이 생성 될 수있는 세 가지 경우를 다루고 있습니다.

1) 회원이 참조 (예 :다른 클래스는 복사 생성자가없는 당신이있을 때 멤버 변수)

class Foople { 
    const int someConst; 
}; 

3 일정 할 때))

class Foop { 
    int& reference; 
}; 

2 포인터처럼 변수의 인스턴스를 참조 해당 유형의 멤버 변수는, 분명히이 경우 기본 (복사 생성자를 사용하는) 방법

class Uncopyable { 
private: 
    Uncopyable(Uncopyable const& other); 
}; 

class Fleep { 
    Uncopyable uncopyable; 
}; 

를 사용하여 복사 할 수 없습니다, 당신은 당신의 자신의 할당 연산자를 작성해야합니다 (또는 P 것 ossibly없이).

2

당신은 (클래스의 모든 인스턴스간에 공유) 정적이 아니며, 하나

  1. 참조 (높은 수준의 포인터)
  2. 일정한
  3. A는 클래스의 구성원이있는 경우 사용자 정의 동적 데이터 유형

기본 = 연산자 (클래스 우리가 얘기와 같은) 및 복사 생성자는 더 이상 없다 V alid 및 매뉴얼 버전을 작성해야합니다.

+0

인용문에서 언급 한 복사 생성자는 다른 클래스가 우리가 말하는 클래스의 복사 생성자가 아니라 복사 생성자를 가진 경우에만 = 연산자가 유효하다는 것을 의미하는 멤버를 인스턴스화하는 다른 클래스를위한 것입니다. –

+0

Class1 obj = obj_of_class2; // this = copy 생성자를 호출합니다. – AbiusX

0
class ClassA 
{ 
    int& _myReferenceMember; 
    const int _myConstant; 
    ClassB _objWhereClassBHasNoCopyConstructor; 
} 

위의 3 가지 사례의 예입니다. 그리고 인용 한 것처럼, (복사 생성자를 원한다면) 커스텀 복사 생성자를 작성하거나 그러한 경우에 멤버 변수를 변경해야합니다.

0

그것의 차이를 말한다 : 클래스 A 들어

 
class A { int a; }; 

 
class B { int& a; }; 

컴파일러이를 암시 할당 연산자 (=)을 생성하지만, B의 경우 것 할 수 없다. C++의 참조에는 포인터 의미가 없기 때문입니다. 즉, 참조 점이 생성 된 후에 변경할 수 없으므로 암시 적 복사본 생성자는 해당 멤버를 복사 할 수 없습니다. const 멤버 (명시 적으로 불변으로 표시됨)와 할당 연산자 (암시 적 또는 명시 적)가없는 멤버에 대해서도 마찬가지입니다.

A의 기본 할당 연산자는이 작업을 수행 본질적 것 :

 
class A 
{ 
    A& operator=(A const& a_) { a = a_.a; } 
    int a; 
};