我试图理解C++中的继承.
我想在派生类中动态创建一个数组,并将数组指针传递给基类,然后基类填充数组.最后,我想从派生类中打印数组.
我写了下面的代码,但是当我运行它时,程序崩溃了,我得到了一个分段错误错误.
我应该如何实现这个?!
class Base {
private:
int* array;
public:
Base(int* a) {
array = a;
for(int i = 0 ; i < 10 ; i++) {
array[i] = i;
}
}
};
class Child : public Base {
private:
int* array;
public:
Child() : array(new int[10]), Base(array) {}
void print() {
for(int i = 0 ; i < 10 ; i++) {
cout << array[i] << endl;
}
}
};
Run Code Online (Sandbox Code Playgroud)
这里的问题是初始化列表中的项目顺序不影响实际执行初始化的顺序; 只考虑声明成员的顺序.而且,基本的初始化总是首先发生.
因此,Child
构造函数实际执行如下:
Base(array)
被调用(array
这里没有设置!)array
被赋予有效值.幸运的是,所有你需要做的,解决这个问题是除去array
来自Child
:它是多余的呢:
class Child : public Base {
public:
Child() : Base(new int[10]) {
}
void print() {
for(int i = 0 ; i < 10 ; i++) {
// Make a[] protected in the parent
cout << a[i] << endl;
}
}
};
class Base
{
protected:
int *array;
...
}
Run Code Online (Sandbox Code Playgroud)
如果您不想a
在父级中进行保护,可以按如下方式修改代码(演示):
Child() : Base(array = new int[10]) {}
Run Code Online (Sandbox Code Playgroud)
但这不是最理想的,因为冗余成员保留在所有实例中Child
.
归档时间: |
|
查看次数: |
882 次 |
最近记录: |