2012-07-21 2 views
0

아래와 같이 생성자에 인수를받는 간단한 클래스를 만들었습니다.클래스에 대한 arguements를 사용하여 복사 생성자 만들기

class Jam 
{ 
    int age; 
    std::string name; 
    Jam *jam; 

    Jam(std::string argName) { 
      name = argName; 
    } 
}; 

그것은 인수를 받아 초기화 Jam의 전달 매개 변수 name. 유일한 문제는 값을 복사하여 포인터를 기존 클래스에 초기화 할 수 있도록 Jam 다른 복사본을 생성자에 전달할 수 싶습니다. 일반적으로 C++에서는 Jam *jam = new Jam(existingJam);을 지정할 수 있으며 기본적으로 복사됩니다. 그러나 이미 매개 변수로 std::string argName이 있으므로이 작업을 거부합니다.

나는 당신 자신의 복사본 생성자를 만드는 방법을 설명하는 기사를 읽었지 만 오히려 지루하고 각 클래스 멤버를 개별적으로 복사하는 것을 포함합니다. 이는 10 개 이상의 데이터 멤버가있는 클래스에 대해서는별로 의미가 없을 것 같습니다. 개별 회원을 개별적으로 초기화하는 것보다 더 나은 방법이 있습니까? 하나를 직접 작성하지 않은 경우

Jam::Jam(std::string argName, Jam *argJam) 
{ 
    age = argJam->age; 
    //etc... 
} 
+0

은 복사 생성자가 아니며 추가 문자열 인수가 있습니다. –

+0

어떻게하면 죽을 수 죽으면? 문제가 무엇입니까? – juanchopanza

답변

2

[그것은 당신이 요구하는지 이해하지 않는 매우 가능하지만, 여기에 간다 ...]

컴파일러는 복사 생성자를 제공합니다. 그 동작은 각 멤버 변수를 차례로 복사하는 것입니다.

+0

당신이 원하거나 원하지 않을 수도 있습니다 ('Jam * jam;'조금 의심스러워 보입니다) –