1
내가 가진 기본 클래스의 생성자를 상속의 새로운 C++ 11 기능에 대해 이해하지 못하는 것이있다 :이 편리한 기능이라고 생각C++ 11 상속 컨스트럭터를 사용할 때 파생 클래스 멤버를 초기화하는 방법?
using BaseClass::BaseClass;
,하지만 지금은 추가가 파생 클래스가 회원, 그것과 내가 파생 클래스의 멤버 초기화하려면 내가 생성자를 다시 작성해야 할 것 같다
struct BaseClass
{
BaseClass(char* name, int intVal, float floatVal) : name(name), intVal(intVal), floatVal(floatVal) {}
char* name;
int intVal;
float floatVal;
};
struct DerivedClass : BaseClass
{
using BaseClass::BaseClass;
int additionalMember;
};
내가 수동으로 생성자를 다시베이스의 생성자에 값을 전달해야 하는가를 다음 추가 멤버를 초기화 ?
struct DerivedClass : BaseClass
{
DerivedClass(char* name, int intVal, float floatVal) : BaseClass(name, intVal, floatVal), additionalMember(7) {}
int additionalMember;
};
그렇다면이 상속 생성자의 새로운 기능은 실제로 제한적으로 보입니다.
그래서 각 시간마다 생성자를 다시 작성해야합니까?
예, 매번 생성자를 다시 작성해야합니다. 사실상 다른 언어와 마찬가지입니다. * aggregate initialization *을 사용하여 얻을 수는 있지만 클래스 및 하위 클래스에 대한 생성자를 절대 정의하지 않아야합니다. 그러면 해당 클래스가 암시 적으로 선언되므로 생성자에 대한 합리적인 옵션이 아닐 수 있습니다. 유스 케이스. – Xirema
당신은 무엇을 기대합니까? –
@ n.m. 나는이 기능이 처음이다. 나는 그것이 그것이 훌륭한 특징이라고 처음에 생각했다. 그런 다음이 문제를 보았을 때 대개 하위 클래스를 만들 때 초기화해야 할 기능 (멤버)을 추가 할 때처럼 매우 제한적이라고 생각했습니다. – Zebrafish