我有两个类A
(基础)和B
(派生自A
):
class A { };
class B : public A
{
int data;
public:
int get_data() { return data; }
};
现在我有一个函数测试,它接受基类指针并调用派生类函数:
void test(A * ptr)
{
ptr->get_data();
}
但问题是ptr
可能指向A
的对象或B
的对象。如果指向B
的对象,那么OK,但是如果指向A
的对象,那就有问题了。
此外,我不想让 get_data()
成为虚拟的,因为 data
不是 A
对象的属性。
如何检查 ptr
是否指向 B
的对象?我认为的一种解决方案是 dynamic_cast
并检查它是否为 NULL
。这是最好的解决方案还是我可以有更好的解决方案?
最佳答案
这意味着您的测试
函数在说谎。它是说它将接受指向任何 A
对象的指针,甚至是从 A
派生的类型,但该函数实际上对 B 以外的任何对象都不起作用
。你最好考个B*
:
void test(B* ptr)
{
ptr->get_data();
]
关于c++ - 创建函数采用基类指针但调用派生类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120394/