首页IT科技虚函数实现机制(关于虚函数和动态绑定)

虚函数实现机制(关于虚函数和动态绑定)

时间2025-04-28 04:34:26分类IT科技浏览4478
导读:问题:是不是虚函数的调用就一定是动态绑定?不是的...

问题:是不是虚函数的调用就一定是动态绑定?不是的

1:在类的构造函数当中,调用虚函数,也是静态绑定(构造函数中对虚函数的调用不发生动态绑定)

2:如果不是通过指针或者引用变量来调用虚函数,那就是静态绑定

代码1

class Base { public: Base(int data=10):ma(data){ cout<<"Base()"<<endl; } //虚函数 virtual void show(){cout<<"Base Show()"<<endl;} //虚函数 virtual void show(int){cout<<"Base Show(int)"<<endl;} ~Base(){cout<<"~Base()"<<endl;} protected: int ma; }; class Derive : public Base { public: Derive(int data=20):Base(data),mb(data){ cout<<"Derive()"<<endl; } void show(){cout<<"Derive Show()"<<endl;} ~Derive(){cout<<"~Derive()"<<endl;} private: int mb; }; int main(){ Base b(10); Derive d(20); b.show();//通过对象调用,静态绑定,不发生多态 d.show();//通过对象调用,静态绑定,不发生多态 //想一想为什么? b.show()如果发生动态绑定,b访问自己的虚函数表,自己虚函数表的show方法是自己Base的void show()方法的方法地址 //d.show() 如果发生动态绑定,d访问自己的虚函数表,自己虚函数表的show方法是自己Derive的void show()的方法地址 //访问的都是属于自己的函数地址,没有必要去走动态绑定机制 //动态绑定,必须通过指针调用虚函数,因为指针本身自己不知道自己指向了什么,所以要调什么方法就必须通过动态绑定来定位最终调用什么方法,这才有意义 Base *pb=&b; Base *pb=&d; pb->show();//发生动态绑定 pb->show();//发生动态绑定 //动态绑定,必须通过引用调用虚函数 Base &rb1=b; rb1.show();//发生动态绑定 Base &rd1=d; rd1.show();//发生动态绑定 return 0; }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
分布式搭建和架构(Python分布式框架大比拼:找到最适合你的工具!) 看新闻赚钱平台哪些好?(看新闻赚钱软件有哪些-怎么看很多老年人热衷于用手机软件抢金币赚钱?)