使用派生类构造函数填充基类受保护成员
C++populating base class protected member using derived class constructor
我有这样的东西:
Class Base
{
public:
Base();
protected:
someType myObject;
}
Class Child:public someNamespace::Base
{
//constructor
Child(someType x):myObject(x){}
}
类Child和Base在两个不同的命名空间…编译器报错我的子类没有myObject
字段有人知道为什么吗?是因为从子构造函数中填充基成员是非法的吗?
谢谢
不能这样初始化继承的成员。相反,可以为基类提供一个构造函数来初始化该成员,然后派生类可以调用该构造函数。
class Base
{
public:
Base(someType x) : myObject{x} {}
protected:
someType myObject;
}
class Child : public Base
{
public:
//constructor
Child(someType x) : Base(x) {}
}
一般来说,类应该负责初始化自己的成员。
这里的问题是,您正在初始化初始化列表中继承的myObject
。当创建派生类的对象时,在进入派生类的构造函数体之前,调用基类的构造函数(默认情况下,如果基类有默认构造函数或没有参数构造函数,否则必须在初始化列表中显式调用构造函数)。
所以,当你做::Class Child:public someNamespace::Base
你的基类的构造函数还没有被调用,这就是为什么你的编译器抱怨::子类没有一个名为myObject的字段,那就是你实际上是在尝试分配一个值给一些还没有被声明和定义!它将在Base
类的构造函数进入其执行后被定义。
那么,您的Child
类构造函数将看起来像这样::
Child(someType x) {
myObject = x;
}
Working ideone link:: http://ideone.com/70kcdC
我在上面的答案中发现了这一点,所以我想它可能会有所帮助!
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 基类中受保护的纯虚函数如何被基类的友元类使用?
- 派生类无法访问基类的受保护成员
- 无法在赋值运算符中访问基类的受保护方法
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 使用基类的C++和修改私有/受保护的属性
- 使从一个基类派生的类能够使用继承的受保护成员
- 无法访问派生类函数内的基类的受保护数据成员
- 派生类如何使用基类的受保护成员
- 如何影响派生类中受保护的基变量
- 访问基类的受保护成员
- 使用指向派生类中的基类的指针访问受基类保护的成员
- 用受保护的继承指向基类方法
- 如何从另一个类的基类访问派生类中的受保护成员
- 在派生的C 类中,访问基类受保护成员作为公共的访问声明
- C++受保护:无法从派生类中访问基的受保护成员
- c++错误:基函数受保护
- 可以从派生类中的静态函数访问基类受保护的成员吗?
- 使用派生类构造函数填充基类受保护成员