C++:调用父类的虚函数

标签 c++ polymorphism

<分区>

#include <iostream>

using namespace std;

struct A
{
    virtual int func(void) { return 0; }
};

struct B : A
{
    int func(void) { return 1; }
};

int main()
{
    A b = B();
    cout << b.func() << endl;
}

我原以为输出是 1,但正如你们大多数人所知道的那样,它是 0

我想在我的实际代码中实现的是这些方面的东西。

struct A
{
     virtual int operator() (int i);
};
struct B : A
{
     int operator() (int i) { return i*2; }
};
struct C : A
{
     int operator() (int i) { return i*3; }
};
struct x
{
     A test;
};

所以我的容器将无法事先判断它是否将容纳 ABC,但应该表现良好还是不一样。

有没有办法实现我预期的功能??

最佳答案

A b = B(); : 你正在构造一个 A 类型的对象,使用来自 B 的赋值运算符/复制构造函数(通过复制省略)对象,但被视为对 A 的引用(这解释了为什么它编译没有错误)

这不是多态性。 b仍然是 A 类型. B 的链接已经丢失了。

这样就可以了:

A *b = new B();

现在

cout << b->func() << endl;

触发多态性/虚函数并按预期产生 1。

关于C++:调用父类的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41308412/

相关文章:

c++ - 调用另一个翻译单元中专门的功能模板

c++ - C memcmp 第三个参数类型

Objective-C 指向实现协议(protocol)的类的指针

java - 继承与策略模式

c++ - 有人可以解释多态性的好处吗?

c++ - 如何在 Clion 和 CMake 中添加 allegro 库?

c++ - 如何终止和停止TBB中的任务?

c++ - 带有共享库的 g++ undefined reference

c++自动推导派生类

二级层次类 : do not understand why it does not work 中的 C++ 多态性