c++ 派生类更改基类指针
c++ Derived class changing a base class pointer
我有一个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);
}
我看到您希望衍生用户在其构造函数中包含衍生数据。
由于多态性,父类可以引用它子类。所以这是合法的:
Data* dp = new DerivedData();
这是您正在寻找的解决方案:
class User {
public:
/*...some methods that use dp...*/
User(Data* dp){
this->dp = dp;
}
protected:
Data* dp;
};
class DerivedUser : public User {
public:
/*...even more methods that use ddp...*/
DerivedUser(DerivedData *dp) : User(dp) {
}
};
现在,派生用户指向你的派生数据类
这里:
int main(){
DerivedData* dp = new DerivedData();
DerivedUser* user = new DerivedUser(dp);
return 0;
}
在派生用户类中添加方法DerivedData* GetData()
DerivedData* GetData()
{
return static_cast<DerivedData>(dp);
}
如果 DerivedUser 的构造函数如下所示,则可以确保dp
是一个DerivedData*
:
DerivedUser(DerivedData* d):User(d){}
以下是完整的代码:
class Data {
/*...the stored data...*/
}
class DerivedData : public Data {
/*...the additional data...*/
}
class User {
public:
User(Data* d):dp(d){}
/*...some methods that use dp...*/
protected:
Data* dp;
}
class DerivedUser : public User {
public:
DerivedUser(DerivedData* d):User(d){}
/*...even more methods that use ddp...*/
protected:
DerivedData* GetData(void)
{
return static_cast<DerivedData*>(dp);
};
}
相关文章:
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 使用基类指针调用基类的值构造函数的语法是什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- C++函数解析基类指针到派生类指针
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 从基类指针派生派生类的模板类型
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 创建基类指针的向量并将派生类对象传递给它(多态性)
- 无法将派生类存储在基类指针的向量中
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 基类指针:在哪里使用 new 和 delete
- 如何在CRTP实现中传递基类指针
- C++继承从基类指针访问派生类中的非虚拟函数
- 通过基类指针获取派生类对象的引用
- C++通过基类指针提升子类的序列化
- 将派生对象分配给函数内的基类指针
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?