클래스의 복사 생성자를 정의 할 때 기본 생성자를 명시 적으로 정의해야합니까 ?? 이유를 알려주세요.복사 생성자와 기본 생성자
예 :
또한class A
{
int i;
public:
A(A& a)
{
i = a.i; //Ok this is corrected....
}
A() { } //Is this required if we write the above copy constructor??
};
우리는 복사 생성자가 아닌 다른 클래스의 다른 매개 변수가있는 생성자를 정의하는 경우, 우리는 또한 기본 생성자를 정의해야합니까? 복사 생성자없이 위의 코드를 고려하고 나는 다음과 같은 프로그램을 작성 답변을 본 후 ....
A(int z)
{
z.i = 10;
}
괜찮 니로 교체하십시오.
#include <iostream>
using namespace std;
class X
{
int i;
public:
//X();
X(int ii);
void print();
};
//X::X() { }
X::X(int ii)
{
i = ii;
}
void X::print()
{
cout<<"i = "<<i<<endl;
}
int main(void)
{
X x(10);
//X x1;
x.print();
//x1.print();
}
이 프로그램은 기본 생성자없이 제대로 작동하는 것 같습니다. 이 사건이 왜 그런지 설명해주십시오. 나는이 컨셉과 정말로 혼동 스럽다 .....
혼란스러워. 아래의 해답은 정확하지만 복사 생성자는 아닙니다. 정확히 어디서 '내가'복사하고 있니? 당신은 일반적으로 잘못된 행동 인 오른쪽을 수정하고 있습니다. 'A (const A & rhs) : i (rhs.i) {}'를 실행해야합니다. 즉, 오른쪽의'i'를 A의'i'의 인스턴스로 복사해야합니다. 매개 변수가 상수로 전달된다는 점에 유의하십시오. x = 3과 같은 것을 말할 때 3이 변경되어서는 안되기 때문입니다. 또한 작은 데이터 유형에서는 참조가 더 느려질 수 있기 때문에 일반적으로 숫자 유형은 값이 아닌 참조로 전달됩니다. – GManNickG
와우 .... 의견을 보내 주셔서 감사합니다 ... 오늘 아침에 생성자를 공부하기 시작한 이래로 혼란스러워했던 생성자의 ": i (rhs.i)"부분에 대한 혼란을 해결했습니다. –
최신 프로그램은 기본 생성자를 전혀 사용하지 않습니다. 이런 이유로, 당신은 그것을 정의 할 필요가 없습니다. 그게 전부입니다. – AnT