c++ - 创建函数采用基类指针但调用派生类函数

标签 c++ inheritance

我有两个类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/

相关文章:

c++ - 快速 C/C++/MATLAB SURF 特征库

c++ - 从主窗体显示另一个窗体 Qt C++

c++ - 未实现的拷贝构造函数的拷贝赋值

c++ - 为什么 std::array< T, 0 > 不为空?

java - Java中静态变量的继承规则是什么?

Java - 列表、类型和继承(也许是通用的?)

WPF : How to inherit from a base(or default) style in an ItemContainerStyle

c++ - 从哪里获得纯 C++ Lame MP3 编码器 - PCM 到 MP3 的示例?

php - 想要从两个类中扩展一个 PHP 类,其中一个是抽象类

c# - 使用 Reshaprer 从一组类中提取父类