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

网页制作与网站建设报告seo1域名查询

网页制作与网站建设报告,seo1域名查询,建筑公司查询网站,怎么做租房网站点击蓝字关注我们来源于网络#xff0c;侵删有无虚函数的对比C 中的虚函数用于解决动态多态问题#xff0c;虚函数的作用是允许在派生类中重新定义与积累同名的函数#xff0c;并且可以通过基类指针或引用来访问基类和派生类中的同名函数。首先写两个简单的类#xff0c;类…点击蓝字关注我们来源于网络侵删有无虚函数的对比C 中的虚函数用于解决动态多态问题虚函数的作用是允许在派生类中重新定义与积累同名的函数并且可以通过基类指针或引用来访问基类和派生类中的同名函数。首先写两个简单的类类 B 继承自类 A即 A 是基类B 是派生类。class A{ public:void print(){cout A endl;} };class B : public A { public:void print(){cout B endl;} };int main() {B b; //创建一个 B 类对象 bA a b; //a 是 b 的一个 A 类引用A *pa b; //pa 是一个指向 A 类对象的指针a.print();pa-print();b.print();return 0; }程序中A 类和 B 类均定义了一个同名函数 print 但两个函数的功能不同编译系统按照同名覆盖原则决定调用对象。另外一点引用的本质是指针常量可以认为 apa 都指向了 b。 注意区分常量指针与指针常量常量指针可以类比于整型指针即指向一个常量的指针指针的指向可以修改指针常量类比于整型常量即一个指针是个常量也就是指针只能固定的指向某一单元指针常量的指向不可改而指向的值可以修改。)int a, b int * const p1 a; //指针常量 const int *p2  b; //常量指针执行函数后我们发现结果为因为 a 是 A 类的一个引用所以 a 的 print( ) 依旧是 A 类的成员函数pa 是 A 类的指针同理而 b 是 B 类的对象调用的 print( ) 为 B 类的成员函数。简言之就是没有 virtual 时调用哪一类的成员函数取决于调用对象 a pab 在定义时的类型。而此时若 B 类对象 b 想调用直接基类 A 的 print 函数则应当 b.A::print( )。这种 apab 能调用哪个同名函数在对象定义时已经确定好了的多态我们称之为静态多态。什么是多态同一个 print 函数在不同的对象中有不同的作用这就呈现了多态。这里再提一点原本基类指针是用来指向基类对象的如果用它指向派生类对象此时基类指针指向的是派生类对象中的基类部分。在没有虚函数时基类指针是无法调用派生类对象中的成员函数的。而当我们在 A 类中 print( ) 前加上关键字 virtual变成虚函数时class A{ public:virtual void print(){cout A endl;} };class B : public A{ public:void print(){cout B endl;} };再次执行主函数结果为这是因为 virtual 跟着对象走即调用的 print( ) 究竟是 A 类还是 B 类的成员函数取决于“ 调用者 ” apa 所指的对象 b 属于哪一类而不再是取决于 apa 本身在定义时的类型了。这种用基类指针或引用指向某一派生类对象从而能够调用指针指向的派生类对象中的函数的多态我们称为动态多态virtual 正是实现动态多态的关键字。虚函数表接着刚才的话题在 A 类中有虚函数的前提下我们继续讨论class C{ public:void print(){cout C endl;} };int main() {cout sizeof(A): sizeof(A) endl;cout sizeof(B): sizeof(B) endl;cout sizeof(C): sizeof(C) endl;A a;B b;C c;cout sizeof(a): sizeof(a) endl;cout sizeof(b): sizeof(b) endl;cout sizeof(c): sizeof(c) endl;return 0; }执行结果为为什么有虚函数的 A 类大小为 8 字节继承 A 的 B 为 8 字节而没有虚函数的 C 类是 1 字节呢联想到 64 位操作系统下指针占8个字节内存而 A 大小也是 8 字节是巧合吗事实上在包含虚函数的类中在该类的存储空间中会有一个指向虚函数表的指针正是这个指针使 A 的大小变为 8 字节。而指针所指的虚函数表本质上是 A 类中定义的所有虚函数名构成的列表。A 中只定义了一个虚函数 print( ) 所以虚函数表中也只有一个虚函数名 print通过这个虚函数名再找到整个虚函数 print( ) 在内存中的存储位置 ( B 同理 ) 。验证虚函数表的存在性虚函数表看不见摸不着怎么确定它的存在呢int main() {A a;B b;a.print();b.print();cout ------------------- endl;typedef void (*func)(); //利用函数指针 func((func**)(a))[0][0](); //((func**)(a))[0] 代表对象 a 的内存空间中的第一个元素指向虚函数表的指针((func**)(b))[0][0](); //((func**)(a))[0][0] 表示虚函数表中第一个函数名return 0; }从结果中我们可以发现((func**)(a))[0][0](); 等效于 a.print();即确实证明了对象 a 的内存空间中存有一个指向虚函数表的指针虚函数表的第一个函数名正是 print 。如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步
http://www.pierceye.com/news/344786/

相关文章:

  • 网站内容的实现方式建筑设计人才招聘
  • 网站做优化效果怎样iis怎么做网站空间
  • 重庆市建设局网站郑州网站建设哪一家好
  • wordpress指定分类广告金融网站排名优化
  • 美妆网站建设方案陕西网络公司网站建设
  • 北京地铁建设的网站深圳建网站兴田德润可信
  • 平台门户网站建设企业战略规划方案
  • 北京网站备案的地址住房和城乡建设部网站质保金
  • 网络营销自学网站腾讯云服务器cvm
  • 建设旅行网站策划书浙江省职业能力建设处网站
  • 网站项目建设的组织机构wordpress做登录
  • 定制杯子岳阳优化营商环境
  • 中学院新校区建设专题网站如何搭建网络教学平台
  • 网站开发课程设计体会房地产查询官网
  • 网站建设 响应式 北京出口外贸网站建设
  • 做网站图片格式做旅游网站的yi
  • 公司网站做二维码网址人防门电气图纸符号大全久久建筑网
  • 电商网站特点中国制造网怎么注册
  • 酒店网站建设便宜酒店设计
  • 东莞网站建设规范新版wordpress编辑
  • 自己的简历网站怎么做工业网页设计欣赏
  • 建设银行苏州官网招聘网站未明潮网站建设保密协议
  • 河南省住房和城乡建设厅查询网站叫外包公司做网站不肯给源代码的
  • 手机站模板权威发布是指什么
  • 青岛开发区做网站做网站的公司上海
  • 哈尔滨自助建站平台如何让网站火起来
  • 高州手机网站建设公司静态网页有哪些网站
  • 格兰仕网站开发方案表情包生成器在线制作
  • 便捷网站建设公司网站网页建设实训心得
  • 怎样做国外能看到的网站计算机大专生的出路