我如何通过基类指针获得派生类数据成员(向上转换)

How can i get a derived class data member via base class pointer (upcasting)

本文关键字:数据成员 转换 派生 何通过 基类 指针      更新时间:2023-10-16
class Base{
common methods
};
class Derived: public Base{
private: 
int a;
char* arr;
public: 
Ctor
Dtor
};
int main(){
Base* B;
Derived D;
B = &D;

我如何从B中提取关于D的数据成员的信息?

不介意语法错误,我更关心如何获得数据成员或如何比较两个派生类,如果我有多个派生类

当您知道指针是Derived时,您可以指针从Base*向下转换为Derived*,最好使用static_cast。当您不知道,但是基类有一个或多个虚方法时,您可以通过dynamic_cast 检查。但是最好在Base中有虚拟方法,这样就可以在不强制转换的情况下做任何事情,否则,理想情况下不应该首先丢弃特定的类型信息。

首先需要将其强制转换为派生类型:

假设v2是派生类

的字符串成员。
if (auto* d = dynamic_cast<Derived*>(B))
    std::cout << "v2: " << d->v2 << std::endl;

在Base中定义虚函数,然后在派生类中实现。有帮助吗?