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

建设网站制作项目描述百度网址输入

建设网站制作项目描述,百度网址输入,网站源码交易平台,泰安有限公司1 定义及实现 1.1 概念 多态是C三大特性之一。通俗来说#xff0c;就是多种形态#xff0c;具体点就是去完成某个行为#xff0c;当不同的对象去完成时会产生出不同的状态。 多态是在不同继承关系的类对象#xff0c;去调用同一函数#xff0c;产生了不同的行为。比如学…1 定义及实现 1.1 概念 多态是C三大特性之一。通俗来说就是多种形态具体点就是去完成某个行为当不同的对象去完成时会产生出不同的状态。 多态是在不同继承关系的类对象去调用同一函数产生了不同的行为。比如学生买票半价这个行为Student继承了Person。Person对象买票全价Student对象买票半价。对于买票这个行为产生了不同的结果。 virtual关键字只在声明时加上在类外实现时不能加 静态成员函数与具体对象无关属于整个类核心关键是没有隐藏的this指针此时没有this无法拿到虚表就无法实现多态因此不能设置为虚函数 1.2 多态的构成条件 由上我们可以知道多态是基于继承关系的。而想要在继承中要构成多态还有两个条件 被调用的函数必须是虚函数且派生类必须对基类的虚函数进行重写 父子类中两个虚函数三同函数名、参数、返回值 重写和隐藏比较类似隐藏是函数名相同就构成隐藏而重写的条件更加苛刻可以看做是隐藏的子集再子集 必须通过父类的指针或引用去调用虚函数 注意在重写基类虚函数时派生类的虚函数在不加virtual关键字时虽然也可以构成重写(因为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范不建议这样使用 普通调用 看指针、引用、对象的类型 多态调用 看指针、引用指向的对象 什么是虚函数呢其实被virtual修饰的类成员函数称为虚函数 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl;} };1.3 虚函数重写的两个例外 协变基类与派生类虚函数返回值类型不同 虚函数返回值可以不同但是必须是父子类关系的指针或引用,即基类虚函数返回基类对象的指针或者引用派生类虚函数返回派生类对象的指针或者引用 编译器进行了强制检查否则应该构成隐藏 析构函数的重写名字特殊处理(基类与派生类析构函数的名字不同) 如果基类的析构函数为虚函数此时派生类析构函数只要定义无论是否加virtual关键字都与基类的析构函数构成重写虽然基类与派生类析构函数名字不同。虽然函数名不相同看起来违背了重写的规则其实不然这里可以理解为编译器对析构函数的名称做了特殊处理编译后析构函数的名称统一处理成destructor。 1.4 重载、覆盖(重写)、隐藏(重定义)的对比 ☆☆☆重写是实现重写 对虚函数进行重写时用的是父类中的声明子类中只是对函数体内容的实现进行重写最终的函数其实是父类声明和子类实现的组合体。 2 C11 override 和 final final修饰虚函数表示该虚函数不能被重写 #final // 以下编译不通过 class Car { public:virtual void Drive() final {} }; class Benz :public Car { public:virtual void Drive() {cout Benz-舒适 endl;} };override检查派生类虚函数是否重写了基类某个虚函数如果没有重写编译报错。 3 抽象类 3.1 概念 在虚函数的后面写上 0 则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类也叫接口类抽象类不能实例化出对象。派生类继承后也不能实例化出对象只有重写纯虚函数派生类才能实例化出对象。纯虚函数规范了派生类必须重写另外纯虚函数更体现出了接口继承。 3.2 接口继承与实现继承 普通函数的继承是一种实现继承派生类继承了基类函数可以使用函数继承的是函数的实现。虚函数的继承是一种接口继承派生类继承的是基类虚函数的接口目的是为了重写达成多态继承的是接口。所以如果不实现多态不要把函数定义成虚函数。 4 多态的原理 4.1 虚函数表 实现多态的原理是虚函数表。 一个类存在虚函数那么编译器就会为这个类生成一个虚表在虚表里存放的是这个类所有虚函数的地址。当生成类对象的时候编译器会自动的将类对象的前四个字节设置为虚表的地址而这四个字节就可以看作是一个指向虚表的指针。虚表里依次存放的是虚函数的地址每个虚函数的地址占4个字节。 虚函数表本质是函数指针数组 _vfptr 虚函数表指针简称虚表指针 虚函数的重写也叫覆盖 重写是语法层的概念 覆盖是原理层的概念 解释子类先把父类的虚表拷贝一份如果发现有重写就在子类虚表中将被重写的函数指针覆盖掉 实际就是编译器也不知道指向的是谁只需要到指向的对象中去找虚函数表调用本质从汇编的角度看到的就是父类只是看该父类是原生父类还是子类切片出的父类 多态调用的函数和普通调用的函数其实是一个函数只是调用的方式不一样 子类新增虚函数监视窗口看不到但是内存窗口可以看到 ![[Pasted image 20240312205400.png]] 虚函数表存在哪里呢 虚表存放在常量区 一个类存在虚函数那么编译器就会为这个类生成一个虚表在虚表里存放的是这个类所有虚函数的地址。当生成类对象的时候编译器会自动的将类对象的前四个字节设置为虚表的地址而这四个字节就可以看作是一个指向虚表的指针。虚表里依次存放的是虚函数的地址每个虚函数的地址占4个字节。
http://www.pierceye.com/news/601753/

相关文章:

  • 全国建设注册中心网站网页设计师培训价格
  • 做网站地图泰安百度公司代理商
  • 网站后台管理员密码汽车网站更新怎么做
  • 广东省网站备案查询怎么建设网站空间和备案
  • 企业网站软件下载红木家具网站模板
  • 如何创建网站步骤湖北网站制作公司的联系方式
  • 佛山建网站费用seo推广效果怎么样
  • 如何选择网站建设公司永州网页定制
  • 淮北市重点工程建设局网站重庆哪家网站
  • 音乐网站开发背景及意义自定义建设网站
  • 商标设计网站猪八戒宝塔一键wordpress
  • 公司网站用什么开发网站 建设 计划书
  • 安陆市城乡建设局网站w10怎么做信任网站
  • wordpress上站工具内网门户网站
  • 商城网站服务器漳浦建设银行网站
  • 可视化 网站开发工具音乐网站后台管理模板
  • 网站架构功能模块及描述网站聊天怎么做
  • 京东电子商务网站的建设做网站运营需要什么资源
  • 市北建筑建网站哪家好个体户可以做网站吗
  • 怎么建自己的网站?网站优化包括哪些内容
  • 网站后台登录域名国外网站网站app
  • 山西建设工程协会网站wordpress二次元主题个人
  • 加强人社局网站建设获取小程序api
  • 服务器网站备案学生ppt模板免费下载 素材
  • 手机做网站软件运营管理培训
  • 迅博威网站建设南宁 建网站 公司
  • 河北省建设机械协会是正规网站吗网站及网页设计费用
  • 门户网站seo前期铁岭网站建设移动网站
  • 肇庆免费模板建站jsp电商网站开发流程图
  • 阿里巴巴国际站网站建设青岛网站搭建公司哪家好