我有两个类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.它是最好的解决方案还是我能有更好的解决方案?
这意味着你的test功能在撒谎.它说它将接受指向任何A对象的指针,甚至是从中派生的类型A,但该函数实际上不会用于除此之外的任何其他对象B.你最好选择一个B*:
void test(B* ptr)
{
ptr->get_data();
]
Run Code Online (Sandbox Code Playgroud)