c++ - 关于多态和重载的问题

标签 c++

#include <iostream>
class X{
public:
    virtual void f() {std::cout << "1";}
};

class Y : public X{
public:
    void f() {std::cout << "2";}
    void g() {std::cout << "3";}
};

class Z : public Y{
public:
    virtual void f() {std::cout << "4";}
    void g() {std::cout << "5";}
    virtual void k() {std::cout << "6";}
};

void main()
{
    X *x = new Z;
    Y *y = new Z;
    Z *z = new Z;
    x->f(); // 4
    y->f(); // 4
    y->g(); // 3
    z->f(); // 4
    z->g(); // 5
    z->k(); // 6
    system("PAUSE");
}

输出:443456

我很困惑,为什么在执行“y->f()”时不打印“2”? Y 类中的 f() 不是虚函数。

我想了解更多,谢谢你的帮助。

最佳答案

why did it not print '2' when doing 'y->f(x)'? f() inside Y class isn't a virtual function.

Y::f 一个虚函数。如果基类具有同名虚函数,则派生类函数也是隐式虚函数。

关于c++ - 关于多态和重载的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896017/

相关文章:

c++ - 如何编写自定义断言?

c++ - 一个根据一组编码标准检查 C/C++ 源代码的免费工具?

c++ - 互斥锁是否会锁定自身,或者有问题的内存位置?

c++ - 在 QTextEdit 中激活光标

c++ - 按值而不是键对映射进行排序

C++ 通过改变 vector.size() 进行迭代

c++ - sqlite3_prepare 失败并显示 "near "TABLE": syntax error"

c++ - 数组折叠成单个元素

c++ - 为什么 Visual Studio 的控制台消失了?

c++ - 如何为 boost::variant 实现算术运算符,使其支持不同的数字类型