가능한 중복 :
C ++ 수퍼 클래스 생성자 호출 규칙
어떻게 슈퍼 클래스의 생성자에게 작업을 위임합니까? 예를 들어
class Super {
public:
int x, y;
Super() {x = y = 100;}
};
class Sub : public Super {
public:
float z;
Sub() {z = 2.5;}
};
어떻게 내가 가질까Sub::Sub()
전화 걸기Super::Super()
그래서 나는 설정할 필요가 없다.x
과y
두 생성자 모두에서?
생성자의 멤버 초기화 자 목록 사용 :
class Super {
public:
int x, y;
Super() : x(100), y(100) // initialize x and y to 100
{
// that was assignment, not initialization
// x = y = 100;
}
};
class Sub : public Super {
public:
float z;
Sub() : z(2.5) { }
};
명시 적으로 기본 클래스 '를 호출 할 필요가 없습니다.태만생성자는 파생 클래스 '생성자가 실행되기 전에 자동으로 호출됩니다.
반면에 기본 클래스가 매개 변수로 생성되도록하려는 경우 (그러한 생성자가있는 경우)필요한 것그것을 부른다 :
class Super {
public:
int x, y;
explicit Super(int i) : x(i), y(i) // initialize x and y to i
{ }
};
class Sub : public Super {
public:
float z;
Sub() : Super(100), z(2.5) { }
};
또한,불릴 수있다.arguments 없이는 기본 생성자이기도합니다. 그래서 당신은 이것을 할 수 있습니다 :
class Super {
public:
int x, y;
explicit Super(int i = 100) : x(i), y(i)
{ }
};
class Sub : public Super {
public:
float z;
Sub() : Super(42), z(2.5) { }
};
class AnotherSub : public {
public:
AnotherSub() { }
// this constructor could be even left out completely, the compiler generated
// one will do the right thing
};
기본 멤버를 기본값으로 초기화하지 않으려는 경우에만 명시 적으로 호출하십시오.
희망이 도움이됩니다.
에있는 기본 생성자를 호출하십시오.member initialize list
원하는 경우 실제로는 Super () 생성자가 자동으로 호출됩니다.
슈퍼 소멸자 가상을 만드는 것을 잊지 마십시오.
class Super {
public:
int x, y;
Super() : x(100),y(100) {}
virtual ~Super(){}
};
Super에 대한 포인터를 통한 삭제가 허용되어야한다면, Super Destructor는 public과 virtual이어야한다.
: Super()
... - Potatoswatter