到目前为止我所拥有的:
enum type {
type0,
type1,
type2
};
struct Base {
type t;
Base () {}
};
struct Derived : Base {
vector<int> mem;
Derived () {
t = type0;
}
};
int main() {
Base s;
switch(...) {
case ... :
s = Derived()
for (...) {
s.mem.push_back(num) // error: 'struct Base' has no member named 'mem'
}
break;
...
}
// do some more stuff with s
return 0;
}
Run Code Online (Sandbox Code Playgroud)
做我想做的最好的方法是什么?我想从一个通用结构开始,并在我弄清楚类型后将其更改为更具体.
首先,将派生对象分配给基础对象是不明智的.派生对象占用更多空间,并且当Base s确定空间时,该空间根本不存在,因此这些成员被切掉.你应该使用指针代替.
第二,用派生指针设置对象,然后在最后将指针值赋给基指针:
Base* s;
//...
Derived* d = new Derived();
// Do whatever you like with d
s = d;
// Delete the object eventually
delete s;
Run Code Online (Sandbox Code Playgroud)
另外,制作Base虚拟的析构函数.这确保了Derived在调用时也会调用析构函数delete s.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |