C++,在使用基类指针初始化派生类后,如何启用对派生类的唯一成员的访问?

问题描述

所以我只是想知道是否有一种方法可以访问在我使用基类指针初始化后未在基类中声明的派生类的唯一成员...请参阅下面的代码

#include <iostream>
using namespace std;

class A{
public:
    int valueBase = 10;
};

class B: public A{
public:
    int valueDerived = 20;
};

int main(){

    A* obj = new B();

    cout<<obj->valueBase<<endl;
    // all okay
    
    cout<<obj->valueDerived<<endl;
    // error: ‘class A’ has no member named ‘valueDerived’ 

    return 0;
}

这里我想访问“派生类”中的“valueDerived”成员......这个想法是,我计划制作继承基类“A”的不同类,并且还有不同的数据类型“ valueDerived' 用于每个派生类,或者在 C++ 中是否有更好的方法来做到这一点?

PS:我不想使用模板,因为在处理不同源文件中的方法定义时它会变得非常难看

解决方法

您问题的字面答案是您可以明确地将指针向下转换为 B*。对于您提供的示例,您必须使用 static_cast,但如果您的基类包含任何虚拟函数(例如虚拟析构函数,强烈建议您通过基类销毁派生类)类指针)然后你就可以使用 dynamic_cast

也就是说,听起来您真正想要的是能够要求一个仅称为基类的对象返回一个值,该值取决于它实际上是哪个派生类。虚函数就是这样做的,所以我建议你仔细阅读它们。