【发布时间】:2022-01-12 16:04:51
【问题描述】:
我有一个我无法解决的问题。 我正在创建一个 cd 类。这张 cd 上保存了 10 个字符项目。构造函数完成表格。
class CD {
protected:
char* data_ = new char[10];
bool* is_in_ = new bool;
public:
CD() {
for (int i = 0; i < 10; i++) {
cout << "Podaj znak: ";
cin >> data_[i];
}
}
接下来我要创建一个可以保存 20 个字符项的子类。
class BR : public CD {
protected:
char* improve_data_ = new char[20];
public:
BR() {
for (int i = 0; i < 20; i++) {
cout << "Podaj znak(BR): ";
cin >> improve_data_[i];
}
}
我的问题是,当我创建一个 BR 对象时,它会自动调用 cd 构造函数,BR 对象调用 cd 构造函数和它自己的构造函数。我的问题是可以不调用父构造函数吗?
【问题讨论】:
-
不,不是。你为什么要这个?您要解决的问题是什么?
-
当您只需要声明
char data[10];时,为什么还要使用new[]?bool *is_in;也一样——为什么不简单地bool is_in;? -
即使可以不调用基本构造函数,派生类中仍然有数据和 is_in。您应该开始考虑一般的继承。派生类包含来自基类的 ALL 以及另外在派生类中定义的。并且要初始化基类元素,调用基类构造函数是绝对必要的。
标签: c++ class constructor derived-class