微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。