【发布时间】:2017-12-30 23:56:58
【问题描述】:
我有一个user class,它有一个指向data class 的成员指针。但是我想实现一个扩展user的derivedUser,但它还需要存储在derivedData class中的附加数据,它看起来像这样:
class Data {
/*...the stored data...*/
}
class DerivedData : public Data {
/*...the additional data...*/
}
class User {
public:
/*...some methods that use dp...*/
protected:
Data* dp;
}
class DerivedUser : public User {
public:
/*...even more methods that use ddp...*/
protected:
DerivedData* ddp;
}
但问题是:按照我的设置方式,DerivedUser class 将存储两个指向同一个对象的不同类型的指针,这不是最优的。 DerivedUser 应该只存储一个指针,并且它应该知道它是DerivedData 类型,并且如果给它错误的数据类型就会失败。问题是:我该如何实现?
我试过了:
class DerivedUser : public User {
public:
/*...even more methods that use ddp...*/
protected:
DerivedData* ddp = dynamic_cast<DerivedData*>(dp);
}
【问题讨论】:
-
难道没有初始化那些类的
private/protected字段的构造函数吗?那么,为什么不能创建一个只接受适当类型的Data实例的构造函数,并将其用于字段的初始化? -
为什么要指向派生类?使用虚函数,并且尽可能只指向基础。
标签: c++ pointers inheritance dynamic-cast