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

如何做喊单网站上海网络公司有哪几家

如何做喊单网站,上海网络公司有哪几家,网站浏览器图标怎么做,做网站麻烦吗文章目录 1. 多态的概念和实现1.1 概念1.2 实现1.2.1 协变1.2.2 析构函数1.2.3 子类虚函数不加virtual 2. C11 final和override3.1 final3.2 override 3. 函数重载、重写与隐藏4. 多态的原理5. 抽象类6.单继承和多继承的虚表6.1 单继承6.2 多继承 7. 菱形继承的虚表(了解)7.1 菱… 文章目录 1. 多态的概念和实现1.1 概念1.2 实现1.2.1 协变1.2.2 析构函数1.2.3 子类虚函数不加virtual 2. C11 final和override3.1 final3.2 override 3. 函数重载、重写与隐藏4. 多态的原理5. 抽象类6.单继承和多继承的虚表6.1 单继承6.2 多继承 7. 菱形继承的虚表(了解)7.1 菱形继承7.2 菱形虚拟继承 8. 多态面试题 1. 多态的概念和实现 1.1 概念 面向对象语言三大特性之一多态意思是多种形态当不同的对象去做同一件事时会有不同的状态/结果 1.2 实现 多态要在继承的关系中实现需要满足2个条件 子类必须完成父类虚函数的重写必须通过父类的指针/引用去调用虚函数 被virtual修饰的成员函数叫做虚函数 子类对父类虚函数的重写需要满足三同即函数名、返回值、参数类型相同但有三种情况例外 协变返回值可以是其他父子类或自身的指针/引用析构函数子类重写父类虚函数时可以不加virtual 我们分别对这三点做解释 1.2.1 协变 父子类的返回值可以不相同但必须是其他父子类后者自身类的指针/引用 1.2.2 析构函数 在继承的章节我们说析构函数名被统一处理为destructor()但没说具体原因其实是要对析构函数设计多态的原因 在上面的场景中ptr1和ptr2分别指向动态开辟出来的A对象和B对象B对象中的一个成员指向动态开辟出来的内存将来我们要手动释放ptr1和ptr2指向的内存于是使用delete ptr1和delete ptr2但根据结果没能释放掉B对象于是导致了内存泄漏的问题 我们希望的是指针指向哪个对象就delete哪个对象的析构这就要求我们对析构函数实现多态调用而多态调用要满足三同其中函数名已经不满足了于是编译器就将父子类的析构函数重命名为destructor()只要我们将析构函数定义为虚函数就满足多态了 因此父子类的析构函数推荐加上virtual 1.2.3 子类虚函数不加virtual 可以看到子类虚函数可以不加virtual修饰此时BuyTicket函数也满足多态这是因为重写的本质是对父类虚函数实现的重写用一道例题来更好的理解这点 class A { public:virtual void func(int val 1) { std::cout A- val std::endl; }virtual void test() { func(); } };class B : public A { public:void func(int val 0) { std::cout B- val std::endl; } };int main() {B* p new B;p-test();return 0; } // A: A-0 B: B-1 C: A-1 D: B-0 E: 编译出错 F: 以上都不正确2. C11 final和override 3.1 final 如果希望一个类不能被继承有两种方式 将类的构造函数私有化这是C98的做法将类进行final修饰被修饰的类叫做最总类这是C11的做法 3.2 override override关键字用于检查子类的虚函数是否完成父类虚函数的重写 3. 函数重载、重写与隐藏 4. 多态的原理 上述代码的结果出乎我们的意料为什么A对象的大小是12字节经过调试我们发现A对象中多了一个指针_vfptr 直接给出结论如果类中有虚函数那么该类实例化出的对象都要有一个指针我们把该指针称为虚表指针(在构造函数初始化列表中初始化)该指针指向一个虚表虚表是一个函数指针数组存放着虚函数的地址 子类对象会将父类的虚函数拷贝到自己的虚表中并检查是否完成虚函数的重写如果完成将虚函数覆盖为自己的虚函数当使用父类的引用/指针去调用虚函数时由于发生切片如果指向父类去调用父类的虚函数如果指向子类去调用子类中父类部分的虚函数这就是多态的原理 多态调用和正常调用区别当进行编译时编译器会检查函数是否满足多态如果满足那么会在执行代码时去对象的虚表中找虚函数调用如果不满足那么在编译时就已经确定要调用函数的地址 在这里要分清楚几个概念 虚函数不在虚表中虚表中存放的是虚函数的地址虚函数存放在常量区(代码段)上虚表存放在常量区上下面有代码验证虚基表是继承中存放虚基类偏移量的用来解决菱形继承数据冗余和二义性的问题 5. 抽象类 在虚函数后加上 0表示该虚函数是纯虚函数有纯虚函数的类叫做抽象类 抽象类在现实生活中没有对应的实体因此无法实例化出对象继承抽象类的子类同样也无法实例化出对象这就强制要求我们完成父类虚函数的重写 6.单继承和多继承的虚表 6.1 单继承 运行上述代码对比监视窗口和内存窗口父类的func1和func2都继承了下来重写了func1于是将父类的func1覆盖子类自身的虚函数直接往父类部分的虚表中放监视窗口没显示func3和func4是因为vs监视窗口的设计问题在内存中是能看到还有两个指针这两个指针指向的就是func3和func4用一份代码来证明 6.2 多继承 在多继承中子类中有两个虚表指针分别在A类的部分和B类的部分中A类的部分继承A类的虚函数B类的部分继承B类的虚函数再看是否完成重写有就拿自身的覆盖自身的虚函数默认往先继承类的虚表中放 为什么要有多继承对象要有两张虚表不能把所有的虚函数放在一张虚表中吗有这样的场景分别有两个父类的指针指向同一个子类对象通过任何一个父类指针都应该调用子类的虚函数但如果只有一张虚表就变成只有其中一个父类指针能调用子类的虚函数 7. 菱形继承的虚表(了解) 7.1 菱形继承 7.2 菱形虚拟继承 8. 多态面试题 class A { public:A(const char* s){ cout s endl; } };class B :virtual public A { public:B(const char* s1,const char* s2) :A(s1) { cout s2 endl; } }; class C :virtual public A { public:C(const char* s1, const char* s2):A(s1) { cout s2 endl; } };class D :public B, public C { public:D(const char* s1, const char* s2, const char* s3, const char* s4):B(s1, s2),C(s1, s3),A(s1){cout s4 endl;} };int main() {D* p new D(class A, class B, class C, class D);delete p;return 0; }// Aclass A class B class C class D // Bclass D class B class C class A // Cclass D class C class B class A // Dclass A class C class B class D// 答案A由此可以证明初始化列表的初始化顺序是按变量在内存中声明的顺序或类在内存中继承的顺序(先继承的类先初始化)同时同一个对象中同一个类只会初始化一次 inline函数可以是虚函数吗 可以但是编译器会忽略inline属性因为虚函数要放到虚表中 静态成员函数可以是虚函数吗 不可以静态成员函数属于整个类无论是通过父类或子类调用调用的都是同一个静态成员函数静态成员函数在编译时就已经确定地址而虚函数要到运行时去虚函数表中找 构造函数可以是虚函数吗 不可以虚表指针在构造函数的初始化列表中初始化如果构造函数时虚函数虚表指针就无法初始化了 对象访问普通函数快还是虚函数快 如果是普通对象一样快如果是对象的指针/引用且满足多态则调用普通函数快调用虚函数需要在虚表中找 虚函数表在什么阶段生成存在哪里 虚函数表在编译阶段生成存放在常量区
http://www.dnsts.com.cn/news/175979.html

相关文章:

  • 昆山高端网站建设网站空间的参数
  • 电商网站建设试题wordpress wp head
  • 通过付费网站做lead福建设计招标网站
  • 网站建设与维护大学生总结二维码生成器 制作
  • 免费网站建设塔山双喜建立网站步骤
  • 织梦 电影网站 模板茂名网站开发公司
  • 湖北网站建设价格深夜视频在线免费
  • 个人站长还有什么类型的网站可以做沈丘网站建设
  • wifi管理网站专业的河南网站建设公司排名
  • 建设网站构成多多进宝cms网站建设
  • html网站正在建设源码wordpress免费的音乐插件下载
  • 国内较好的网站开发商城西安 房产网站建设
  • 外贸网站怎么做才好3d建模图片
  • 电子商务平台网站建造安徽二建标准
  • 三门峡网站开发如何优化网站速度
  • 如何建立商城网站公众号网站怎么做的
  • 国税网站建设调查报告支付网站建设要求
  • 福建省文明建设办公室网站推广网站怎么建设和维护
  • 网站流量多少做网盟做直播网站用什么程序
  • 网站地链接结构关于公司网站建设的申请
  • 涿州网站建设有限公司本地视频做成链接网址
  • 有没有做的很炫的科技型网站网站代备案需要多少钱
  • 和先锋影音和做的网站腾讯 网站开发
  • 百科网站模板做职业装的网站
  • 黑龙江建设部网站黑龙江交通基础设施建设网站
  • o2o网站建设西安网站建站品牌
  • 信用湘潭网站给人做代工的网站
  • 江苏省建设网站山西网站seo
  • 企业网站设计话术wordpress斗图
  • 同ip网站过多是空间的原因还是域名的原因筑招网