当前位置: 首页 > news >正文

网站技术培训江门云建站模板

网站技术培训,江门云建站模板,济宁网站建设价格,网站建设找哪家公司当一个类中有一个或多个虚函数时#xff0c;内存中会多一个虚指针#xff08;vptr#xff0c;virtual pointer#xff09;#xff0c;指向一个虚表#xff08;vtbl#xff0c;virtual table#xff09; 父类有虚函数#xff0c;则子类一定有虚函数 在下图示意图中内存中会多一个虚指针vptrvirtual pointer指向一个虚表vtblvirtual table 父类有虚函数则子类一定有虚函数 在下图示意图中我们可知B继承AC继承B。 A有两个虚函数B继承A则也有两个虚函数同时B对虚函数vfunc1进行了重写同理C继承B则C也有两个虚函数C对虚函数vfunc1也进行了重写。故在内存中A B C对应的虚函数vfunc2是同一个均为A::vfunc2对应的虚函数vfunc1分别为A::vfunc1B::vfunc1C::vfunc1。 c编译器遇到函数调用时会有两个考量是静态绑定还是动态绑定静态绑定是call xxx地址即一定调用到某个地址动态绑定可以调用到不同的地址 动态绑定需符合三个条件 通过指针调用对象调用函数是静态绑定指针是向上的关系向上关系是指比如 父类 名称 new 子类这样的关系即是一种向上的关系调用的是虚函数 虚函数的这种用法称之为多态。 示例程序 #includeiostream using namespace std;class A { public:A(int data1, int data2) :m_data1(data1), m_data2(data2) {}virtual void vfunc1() { cout 调用的是A的vfunc1 endl; }virtual void vfunc2() { cout 调用的是A的vfunc2 endl; }void func1() { cout 调用的是A的func1 endl; }void func2() { cout 调用的是A的func2 endl; }void getData() {cout A的m_data1: m_data1 ,A的m_data2: m_data2 endl;} private:int m_data1, m_data2; };class B:public A { public:B(int n1,int n2,int n3) :A(n1,n2), m_data3(n3){}virtual void vfunc1() { cout 调用的是B的vfunc1 endl; }void func2() { cout 调用的是B的func2 endl; }void getData() {A::getData();cout B的m_data3: m_data3 endl;} private:int m_data3; };class C :public B { public:C(int n1, int n2, int n3,int n4,int n5):B(n1,n2,n3) , m_data1(n4), m_data4(n5) {}virtual void vfunc1() { cout 调用的是C的vfunc1 endl; }void func2() { cout 调用的是C的func2 endl; }void getData() {B::getData();cout C的m_data1: m_data1 ,C的m_data4: m_data4 endl;} private:int m_data1, m_data4; };测试程序 int main() {A a(1,2);a.vfunc1();a.vfunc2();a.func1();a.func2();a.getData();cout endl;B b(3,4,5);b.vfunc1();b.vfunc2();b.func1();b.func2();b.getData();cout endl;C c(6,7,8,9,10);c.vfunc1();c.vfunc2();c.func1();c.func2();c.getData();cout endl;A* d new B(1,3,5);d-vfunc1();d-vfunc2();d-func1();d-func2();d-getData();cout endl;A* d2 new C(1, 3, 5,7,9);d2-vfunc1();d2-vfunc2();d2-func1();d2-func2();d2-getData();system(pause);return 0; }输出结果 调用的是A的vfunc1 调用的是A的vfunc2 调用的是A的func1 调用的是A的func2 A的m_data1:1,A的m_data2:2调用的是B的vfunc1 调用的是A的vfunc2 调用的是A的func1 调用的是B的func2 A的m_data1:3,A的m_data2:4 B的m_data3:5调用的是C的vfunc1 调用的是A的vfunc2 调用的是A的func1 调用的是C的func2 A的m_data1:6,A的m_data2:7 B的m_data3:8 C的m_data1:9,C的m_data4:10调用的是B的vfunc1 调用的是A的vfunc2 调用的是A的func1 调用的是A的func2 A的m_data1:1,A的m_data2:3调用的是C的vfunc1 调用的是A的vfunc2 调用的是A的func1 调用的是A的func2 A的m_data1:1,A的m_data2:3从输出结果中我们可以看出当对函数进行重写后子类在调用函数时会调用重写后的函数。当函数是虚函数时若我们按照父类 名称 new 子类 的形式生成指针则该指针在调用函数时若调用的函数是虚函数则其会调用子类重写后的虚函数若调用的函数不是虚函数则无论子类对该函数是否重写调用的均为父类的函数。
http://www.zqtcl.cn/news/358999/

相关文章:

  • 河南省建协网官方网站建网站卖阀门
  • 医院网站怎么制作重庆安全监督工程信息网
  • 饰品网站建设规划书搭建微信网站
  • 开发网站访问流量赚钱加盟网站需要怎么做
  • 装饰协会网站源码湖南省郴州市北湖区
  • 花都网站建设价格重庆市住房和城乡建设厅网站
  • 北京住总第一开发建设有限公司网站wordpress 网站访问认证页面
  • 网站制作的管理苏州百度推广服务中心
  • 厦门建行网站首页企业展厅建筑外观
  • 重庆定制型网站建设1000套网站源码
  • 阿里云网站建设服务费会计科目安平县建设局网站
  • 网上做国外兼职网站网络编程技术实验报告
  • iis网站服务器安全隐患分析创新的合肥网站建设
  • 蛋糕网站建设方案广州网站公司推荐
  • 无锡seo公司网站广渠门做网站的公司
  • 安徽股票配资网站建设seo教程自学网
  • 网站建设酷隆做3d建模贴图找哪个网站
  • 天津市工程建设交易管理中心网站自己如何搭建服务器
  • 汉语网站建设心得专业网站的定义
  • 泉州台商区建设局网站论坛内网站怎么建设
  • 做文字云的网站平面设计发展前景
  • 域名注册后怎么建网站万网建站教程
  • 郑州网站建设幸巴石家庄站规模
  • 江华网站建设企业传统的网络营销推广方法
  • 网站开发与推广新网站开发工作总结
  • 永修县建设局网站长沙网站关键词优化
  • 厦门建站服务低代码开发会废了程序员吗
  • 安阳汤阴县网站建设下载wix做的网站
  • 福清市建设局网站深圳工业设计协会封昌红
  • 网站建设公司做网站要多少费用重庆找工作哪个网站好