创建函数获取基类指针但调用派生类函数

Hap*_*tal 3 c++ inheritance

我有两个类A(基础)和B(派生自A):

class A { };

class B : public A
{
    int data;
public:
    int get_data() { return data; }
};
Run Code Online (Sandbox Code Playgroud)

现在我有一个函数测试,它接受基类指针并调用派生类函数:

void test(A * ptr)
{
    ptr->get_data();
}
Run Code Online (Sandbox Code Playgroud)

但问题ptr可能是指A对象或B对象.如果它指向B的是对象,那么确定,但如果A是对象,那么这是一个问题.

而且,我不想get_data()虚拟,因为data它不是A对象的属性.

如何检查ptr点是否B对象?我能想到的一个解决方案是dynamic_cast检查它NULL.它是最好的解决方案还是我能有更好的解决方案?

Jos*_*eld 5

这意味着你的test功能在撒谎.它说它将接受指向任何A对象的指针,甚至是从中派生的类型A,但该函数实际上不会用于除此之外的任何其他对象B.你最好选择一个B*:

void test(B* ptr)
{
   ptr->get_data();
]
Run Code Online (Sandbox Code Playgroud)