gpt4 book ai didi

c++ - 虚函数不进入基类

转载 作者:行者123 更新时间:2023-11-30 05:40:32 25 4
gpt4 key购买 nike

我想知道为什么这个函数打印“aba h()”而不是“son h()”,因为它是虚拟的。我想也许这个函数隐藏了另一个函数,但它具有相同的签名。

class Aba: public Saba {
public:
Aba(){cout << "Aba Ctor" << endl;}
Aba(const Aba& a){cout << "Aba Copy Ctor" << endl;}
~Aba(){cout << "Aba Dtor" << endl;}
virtual void g(){cout << "Aba g()" << endl;}
virtual void f(int){cout << "Aba f(int)" << endl;}
virtual void h(){cout << "Aba h()" << endl;}
};

class Son: public Aba {

public:
Son(){cout << "Son Ctor" << endl;}
Son(const Son& a){cout << "Son Copy Ctor" << endl;}
~Son(){cout << "Son Dtor" << endl;}
void f(){cout << "Son f()" << endl;}
void h(){cout << "Son h()" << endl;}
};

主要内容:

int main()

{
Aba aba = Aba();
aba.h();

return 0;

}

最佳答案

这里你用一个静态对象调用函数 h,因此这个函数的调用只在编译时得到解决,它与函数无关是虚拟的。此调用的绑定(bind)已经完成。

仅在动态对象的情况下,绑定(bind)在运行时完成,查看指针指向哪个对象。

Aba *ptr = new Son;
ptr->h(); //Ptr is pointing to Son, hence Son::h() will get called.

关于c++ - 虚函数不进入基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com