- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 多态第七章 多态int main(){ parallelogram p; rectangle r; diamond d; square s; quadrangle* quads[] = { p, r, d, s }; for (auto q : quads) std::cout area of q-whoami() : q-area() std::endl;? return 0;}area of parallelogram: 15area of rectangle: 15area of diamond: 7.5area of square: 25area of parallelogram: -1area of rectangle: -1area of diamond: -1area of square: -1第七章 多态一个parallelogram对象的内部结构quad[0]??quadrangle::namequadrangle::whoami()quadrangle::area()quadrangle子对象??由于类型的限制,因此quad[0]是“看不到”这部分内容的p??parallelogram::widthparallelogram::heightparallelogram::area()??第七章 多态简而言之,多态指的是一个接口(名字),多种实现。具体一点,就是在不同的语境中调用相同的方法(接口),会得到不同的结果。这种机制赋予了程序员控制复杂程序的灵活性。在C++中,多态有静态和动态两种之分,且都是通过函数重载实现的。第七章 多态void f();void f(int x);void f(double x);void f(int x, int y);编译期确定运行时确定的是“动态多态”第七章 多态class quadrangle{ public: virtual double area() const { return -1.0; }};class parallelogram : public quadrangle{public: double area() const { return width * height; }};这个类称为“多态类”在派生类中:原型一致地重载。这是一次覆盖(overriding)无需再次声明为virtual如果原型不一致,虚特性将在这一代中丢失第七章 多态class Y : public X{public: void f() final {} //OK,这是最终版本,派生类不能覆盖 void g() override {} //OK,显式覆盖};class X{public: virtual void f() {} virtual void g() {}};class Z final : public Y //Z是最终派生类,它不能再有子代了{public: void f() override {} //error void g() override {} //OK};class W : public Z {}; //error第七章 多态struct B { B f() {} }; /*这是对基类同名成员的覆盖*/ struct D: public B { D f() {}};返回类型满足以下条件之一:二者都是自己类型的指针,或左值引用,或右值引用。二者是同一种类T;或者D::f返回的类是T的一个无二义的、可访问的祖先类。二者(指针/引用)都含有cv-修饰符,并且D::f返回类型的cv-修饰符等于或少于B::f的。那么即使返回类型有差异,但仍然被认为是一次覆盖。这种覆盖称为是协变(covariant)的。第七章 多态class alignas(8) noVirtual { char a; void f() {} };?class alignas(8) oneVirtual { char a; virtual void f() {} };?class alignas(8) manyVirtual { char a;virtual void f() {}virtual int g() { return 0; } virtual double h(double) { return 1.0; } };size of noVirtual: 8size of oneVirtual: 16size of manyVirtual: 16ref: size of pointer: 8这三个类的内存字大小(字节数)分别是多少呢?这多出的8字节可能是什么呢?第七章 多态quadrangle对象VTABLEquad[0]VPTRareaparallelogram
您可能关注的文档
- Android应用程序开发与典型案例第1章 Android基本概念.pptx
- Android应用程序开发与典型案例第3章 资源文件设计.pptx
- Android应用程序开发与典型案例第4章 图形界面编程.pptx
- Android应用程序开发与典型案例第5章 Intent与intent-filter详解.pptx
- Android应用程序开发与典型案例第9章 Android数据存储.pptx
- Android应用程序开发与典型案例第10章 内容提供者详解.pptx
- Android应用程序开发与典型案例第11章 传感器编程.pptx
- Android应用程序开发与典型案例动态注册.ppt
- Android应用程序开发与典型案例谷歌软件下载器简介.pptx
- Android应用程序开发与典型案例监听系统开关机.ppt
有哪些信誉好的足球投注网站
文档评论(0)