C++ 派生类的初始值设定项列表
我想要一个派生类,它有一个初始化inheirited成员的默认构造函数 为什么我可以这样做C++ 派生类的初始值设定项列表,c++,inheritance,constructor,polymorphism,initializer-list,C++,Inheritance,Constructor,Polymorphism,Initializer List,我想要一个派生类,它有一个初始化inheirited成员的默认构造函数 为什么我可以这样做 class base{ protected: int data; }; class derived: public base{ public: derived(){ //note data = 42; } }; int main(){ derived d(); } 但不是这个 class base{ protected: int data; }; class derived: pub
class base{
protected:
int data;
};
class derived: public base{
public:
derived(){ //note
data = 42;
}
};
int main(){
derived d();
}
但不是这个
class base{
protected:
int data;
};
class derived: public base{
public:
derived(): //note
data(42){}
};
int main(){
derived d();
}
错误:类“派生”没有任何名为“数据”的字段。
对象只能初始化一次。(例外情况是,如果您先初始化它,然后销毁它;然后您可以稍后再次初始化它。)
如果您可以执行您试图执行的操作,那么base::data
可能会被初始化两次。base
的某些构造函数可能会初始化它(尽管在您的特定情况下不会),然后派生的构造函数可能会再次初始化它。为了防止这种情况,该语言只允许构造函数初始化自己的类的成员
初始化与赋值不同。分配给数据
没有问题:您只能初始化数据
一次,但您可以分配给它任意多次
您可能需要为base
编写一个构造函数,该构造函数为数据
获取一个值
class base{
protected:
int data;
base(int data): data(data) {}
};
class derived: public base{
public:
derived(): base(42) {}
};
int main(){
derived d{}; // note: use curly braces to avoid declaring a function
}
此作业需要一个基类构造函数。你可以在这里找到更多的解释-
我会尽快澄清,对于一个对象来说,新的(ER)对象是(一个类)的实例,因此当你可以拥有同一个类的多个对象时,每个对象只能被初始化一次。@ Jason MC92,<代码> INT/COM>也是C++中的一个对象。对象是一个存储区域。是的,我知道。我只是想澄清一下。早在我学习面向对象编程时,我就常常混淆“类”和“对象”,所以我只是想让这些组更清晰一些D