class Parent
{
public:
int member;
Parent():
member(0)
{
}
};
class Child:
public Parent
{
public:
Child():
member(1) //error
{
}
};
2
A
回答
1
class Parent
{
public:
int member;
Parent(int m = 0):
member(m) // constructor takes an argument, default as 0
{
}
};
class Child:
public Parent
{
public:
Child():
Parent(1) // refer to super class's constructor here
{
}
};
0
只需在函数体中使用member = 1;
即可。
说明:初始化列表仅适用于类自己的字段(包括父类的构造函数)。除此之外,父类将首先被构造(因此当你的子类被构造时它的初始化列表已经被执行),所以你的代码会再次构造成员,这是没有意义的。
0
初始化列表中是否有允许使用其它构造比默认的一个。显然,一个Child构造函数不能选择除Parent构造函数以外的任何东西来使用。所以两个解决方案:
- 添加一个构造函数家长做你想要的东西,使它的保护,如果需要
- 简单地添加在儿童构造的分配。
1
更改您的代码:
class Child:
public Parent
{
public:
Child()
{
member = 1;
}
};
或尝试:
class Child:
public Parent
{
public:
Child():Parent(),member(1)
{
}
};
6
class Parent{
private:
int member;
public:
Parent():
member(0){
}
protected:
explicit Parent(int x):
member(x){
}
};
class Child:
public Parent {
public:
Child():
Parent(1){
}
};
相关问题
- 1. 类成员初始化父类
- 2. 为什么?从未初始化的父类成员隐式初始化
- 3. 使用初始化列表(C++)初始化父级的受保护成员
- 4. 如何初始化静态成员
- 5. arm_rfft_init_q31:cfft成员如何初始化?
- 6. 结构成员初始化
- 7. 结构成员初始化
- 8. 类成员初始化
- 9. 在初始化其他成员时跳过结构成员的初始化
- 10. 如何初始化C++中的基本成员初始化部分的std :: map?
- 11. 初始化会员和成员
- 12. 初始化向量的元组类成员初始化列表
- 13. GCC - 成员应该在成员初始化列表中初始化
- 14. 在C#中初始化子类中的父类数组成员
- 15. 如何在初始化其他初始化后初始化类的静态成员?
- 16. 不能在成员初始化列表初始化对象
- 17. 在初始化列表中初始化引用对象成员
- 18. 代替成员初始化和集合初始化
- 19. 如何使用成员初始化列表来初始化数组?
- 20. 初始化结构的私有成员
- 21. 对象静态成员的初始化
- 22. c#中的成员初始化
- 23. 非显式初始化成员在其成员初始化的结构中始终为0?
- 24. 类成员初始化差异
- 25. 静态成员变量初始化
- 26. C++初始化类成员对象
- 27. C++类构造和成员初始化
- 28. 静块VS静态成员初始化
- 29. 强制静态成员初始化
- 30. C++类成员初始化(POCO)
你打我吧:)虽然我的版本,我不改基类的公共接口 – 2010-11-28 19:13:29
@阿门你的也很好。我不认为我犯了罪,因为班级的用户不必更改他的代码。这是开发人员的选择。 – chrisaycock 2010-11-28 19:16:03