使用派生 class 对象数组初始化基 class 指针
initialize a base class pointer with an array of derived class objects
我可以做以下事情吗?
要用派生的 class 对象数组初始化基 class 指针?
gnu g++ 在到达删除语句时崩溃了...
有什么建议吗?我是否必须重载新的 [] 和 delete 运算符?
谢谢!
#include <iostream>
using std::endl;
using std::cout;
using std::cin;
// base class --> Base
class Base {
public:
// constructor
Base() {
cout << " --> constructor --> Base" << endl;
}
// destructor
virtual ~Base() {
cout << " --> destructor --> ~Base" << endl;
}
};
// derived class --> D1
class D1 : virtual public Base {
public:
// constructor
D1() : Base(), x1(10) {
cout << " --> constructor --> D1" << endl;
}
// destructor
virtual ~D1() {
cout << " --> destructor --> ~D1" << endl;
}
private:
int x1;
};
// the main program
int main()
{
const int DIM = 100;
Base * pb2 = new D1 [DIM];
delete [] pb2;
return 0;
}
这行不通 - C 数组不知道多态类型的动态大小。如果要使用多态性,则必须使用指向基类型的指针(最好是智能指针)的数组(最好是 std::vector
或其他标准数组,而不是 C 数组)。
我可以做以下事情吗? 要用派生的 class 对象数组初始化基 class 指针? gnu g++ 在到达删除语句时崩溃了...
有什么建议吗?我是否必须重载新的 [] 和 delete 运算符?
谢谢!
#include <iostream>
using std::endl;
using std::cout;
using std::cin;
// base class --> Base
class Base {
public:
// constructor
Base() {
cout << " --> constructor --> Base" << endl;
}
// destructor
virtual ~Base() {
cout << " --> destructor --> ~Base" << endl;
}
};
// derived class --> D1
class D1 : virtual public Base {
public:
// constructor
D1() : Base(), x1(10) {
cout << " --> constructor --> D1" << endl;
}
// destructor
virtual ~D1() {
cout << " --> destructor --> ~D1" << endl;
}
private:
int x1;
};
// the main program
int main()
{
const int DIM = 100;
Base * pb2 = new D1 [DIM];
delete [] pb2;
return 0;
}
这行不通 - C 数组不知道多态类型的动态大小。如果要使用多态性,则必须使用指向基类型的指针(最好是智能指针)的数组(最好是 std::vector
或其他标准数组,而不是 C 数组)。