首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++虚函数行为

C++虚函数行为
EN

Stack Overflow用户
提问于 2015-12-06 08:43:57
回答 2查看 142关注 0票数 1

根据我的理解,我正在做一些练习。在编译下面的代码时,我得到了派生::disp()调用,然后调用非虚拟函数"Print“。

我的问题是,为什么调用派生类" print“版本而不是基打印版本,即使”Print“不是虚拟的。

代码语言:javascript
复制
class Base
{
public:
     void print(){
        cout<<"Base::Print()\n";
    }
 virtual void disp(){
    cout<<"Base::Disp()\n";
    }
};

class Derived: public Base
{
public:
    void print(){
        cout<<"Derived::Print()\n";
    }
    void disp(){
    cout<<"Derived::Disp()\n";
    print();
    }
};

void main()
{
    Base *pB = new Derived();

    pB->disp();
}

产出:

派生::Disp()

派生:Print()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-06 08:50:22

如果在(虚拟或非虚拟)成员函数中调用非虚拟函数,则调用该类的成员函数。

如果要在main中调用pB->print(),它将调用Base::Print。但就其本身而言,pB->Disp()调用Derived::Disp(),它调用Derived::Print的基础是从Derived类中调用它。

票数 5
EN

Stack Overflow用户

发布于 2015-12-06 09:11:39

在非静态成员函数的主体中,关键字this具有指向调用函数的类类型对象的指针类型。

如果为派生类调用虚拟函数,则this具有该类指针的类型。

在成员函数内部,对类成员的访问将例如在程序的上下文中查找如下

代码语言:javascript
复制
( *this ).print();

其中this的类型为Derived *

因此,调用该类的成员函数print

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34115599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档