2012-07-04 1 views
1

파생 클래스 인스턴스를 새로 작성할 때 기본 클래스에 생성자 매개 변수를 제공하는 방법이 있습니까? (즉, 기본 클래스 생성자가 이러한 매개 변수에 대한 기본값을 갖는 경우)파생 클래스 인스턴스를 생성 할 때 기본 클래스 생성자 매개 변수 제공

예 :

class Base 
{ 
public: 
Base::Base(string name = "") 
: m_name(name) {}; 

private 
string m_name; 
}; 

class Derived : public Base 
{ 
public: 
Derived::Derived() {}; 
}; 

은 그 때 나는 같은 것을 할 필요가 :

void main() 
{ 
Base* instance = new Derived("Jeff"); 
}; 

이 분명히 작동하지 않습니다. 파생 된 인스턴스를 새로 작성하고 파생 클래스 생성자에서 해당 매개 변수를 제공 할 필요없이 기본 클래스에 생성자 매개 변수를 제공하는 방법이 있습니까?

답변

2

파생 된 인스턴스를 새로 작성하고 해당 매개 변수를 파생 클래스 생성자에 제공 할 필요없이 생성자 매개 변수를 기본으로 제공 할 수 있습니까?

번호

파생 클래스의 생성자는 인수를, 명시 적으로 기본 클래스 생성자에 그들을 통과해야합니다.

class Derived : public Base 
{ 
public: 
Derived::Derived(string name) : Base(name) {}; 
}; 

new을 사용하는지 여부와 상관없이 적용됩니다.

+0

파생 생성자에서 매개 변수를 제공하지 않아도되는 방법이 있었으면합니다. 이것이 유일한 방법입니까? –

+0

@MarcusTomlinson : 꽤 많이. 분명히, 내가 제안한 것들의 변종들이 있지만, 그것들은 초기화 프로 시저에서'Base' 생성자를 명시 적으로 호출하는'Derived' 생성자를 포함합니다. 그러나 이것은 의미가 있습니다. 'Derived'가 'Base'에서 파생된다는 사실은 건설시 구현 세부 사항입니다. 그 사실은 본질적으로 캡슐화됩니다. –

+0

젠장 ... 대답 쐈어! –

1

고유 이름을 기본 클래스로 사용하려면이 작업을 수행 할 수 없습니다. 별개의 이름은 기준이 아니므로 상수 리터럴을 다음과 같이 사용하여 처리 할 수 ​​있습니다.

class Base 
{ 
public: 
Base::Base(string name = "") 
: m_name(name) {}; 

private 
string m_name; 
}; 

class Derived : public Base 
{ 
public: 
Derived::Derived() : Base ("Jeff") {}; 
Derived::Derived(string &name) : Base (name) {}; 
}; 

또는 파생 클래스 생성자에 기본값을 전달합니다.

class Derived : public Base 
    { 
    public: 
    Derived::Derived(string name = "Jeff") : Base (name) {}; 
    }; 
관련 문제