Programming/C++ STL2013. 3. 13. 20:31

1. 컨스트럭터가 하나라도 생성(오버로드) 되면 기본 생성자가 사용불능이 되기 때문에
   필요한 생성자들을 모두 만들어 주어야 한다. 
class abc
{
public:
int a;
abc(int);
// abc();
};

abc::abc(int val)
{
a = val;
} 
abc a; // error C2512: 'abc' : 사용할 수 있는 적절한 기본 생성자가 없습니다.

이러한 문제를 해결하기 위해서는 인자를 가지지 않는 생성자를 만들어야 한다.
class abc
{
public:
int a;
abc(int);
abc();
};

abc::abc(int val)
{
a = val;
}

abc::abc()
{
a = 0;
} 

 
2. 당연한(?) 것이지만 클래스 이름과 동일한 변수는 만들수 없다.
클래스 이름과 동일한 식별자는 '생성자'로 할당되기 때문
class abc
{
public:
int abc;
}; 
error C2039: 'a' : 'abc'의 멤버가 아닙니다.

3. 상속의 경우 상속된 내용에 대해서는 컨스트럭터가 적용된다.
class abc
{
public:
int a;
abc(int);
abc();
~abc();
};

abc::abc(int val) {a = val;}
abc::abc() {a = 2;}
abc::~abc() {cout << "die\n";}

class bbc : public abc
{
public:
int b;
};

int _tmain(int argc, _TCHAR* argv[])
{
abc a;
bbc b;

a.a = 1;
b.b = 2;
cout << b.a << "\n";
b.a = 3;
cout << b.a << "\n";
return 0;
} 

결과는
2
3
die
die 
Posted by 구차니

댓글을 달아 주세요