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

四川省建设部网站合肥市住房和城乡建设局网站

四川省建设部网站,合肥市住房和城乡建设局网站,网站ui设计基础,wordpress大括号1. 多态的概念 1.1 概念 多态的概念#xff1a;通俗来说#xff0c;就是多种形态#xff0c;具体点就是去完成某个行为#xff0c;当不同的对象去完成时会产生出不同的状态。 举个栗子#xff1a;比如买票这个行为#xff0c;当普通人买票时#xff0c;是全价买票通俗来说就是多种形态具体点就是去完成某个行为当不同的对象去完成时会产生出不同的状态。 举个栗子比如买票这个行为当普通人买票时是全价买票学生买票时是半价买票军人买票时是优先买票。 2. 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象去调用同一函数产生了不同的行为。比如Student继承了Person。Person对象买票全价Student对象买票半价。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl; } };class Student : public Person { public:virtual void BuyTicket() { cout 买票-半价 endl; } }; void Func(Person p) {p.BuyTicket(); } int main() {Person ps;Student st;Func(ps);Func(st);return 0; } 那么在继承中要构成多态还有两个条件 1. 必须通过基类的指针或者引用调用虚函数 2. 被调用的函数必须是虚函数且派生类必须对基类的虚函数进行重写 BuyTicker就是虚函数要构成多态就必须完成虚函数的重写而且必须通过基类的指针或者引用调用这个虚函数。 2.2 虚函数 虚函数即被virtual修饰的类成员函数称为虚函数。 2.3虚函数的重写 虚函数的重写(覆盖)派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同)称子类的虚函数重写了基类的虚函数。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl; } };class Student : public Person { public:virtual void BuyTicket() { cout 买票-半价 endl; } }; 虚函数重写的两个例外1. 协变(基类与派生类虚函数返回值类型不同) 派生类重写基类虚函数时与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用派生类虚函数返回派生类对象的指针或者引用时称为协变。 有些选择题可能会出虚函数重写的返回值类型不一定相同协变就是一个例外。 class A {}; class B : public A {}; class Person { public:virtual A* f() { return new A; } }; class Student : public Person { public:virtual B* f() { return new B; } };int main() {Person* pnew Student;p-f();return 0; } 2. 析构函数的重写(基类与派生类析构函数的名字不同) 如果基类的析构函数为虚函数此时派生类析构函数只要定义无论是否加virtual关键字都与基类的析构函数构成重写虽然基类与派生类析构函数名字不同。虽然函数名不相同看起来违背了重写的规则其实不然这里可以理解为编译器对析构函数的名称做了特殊处理编译后析构函数的名称统一处理成destructor。 如果使用基类的指针指向一个派生类就会出现内存泄漏的情况因为派生类的析构函数并没有调用。解决方法就是让派生类和基类的析构函数完成重写。 class Person { public:~Person() { cout ~Person() endl; } }; class Student : public Person { public:~Student() { cout ~Student() endl; } }; int main() {Person* p1 new Person;Person* p2 new Student;delete p1;delete p2;return 0; }还需要注意的点是如果去掉基类的virtual那么两个fun函数就不构成重写而是隐藏。 但是去掉派生类的virtual还是构成重写。 2.4 C11 override 和 final C对函数重写的要求比较严格但是有些情况下由于疏忽可能会导致函数名字母次序写反而无法构成重载而这种错误在编译期间是不会报出的只有在程序运行时没有得到预期结果才来debug会得不偿失因此C11提供了override和final两个关键字可以帮助用户检测是否重写。 1. final修饰虚函数表示该虚函数不能再被重写 final也可以放在类名后面表示不能被继承。 class Car { public:virtual void Drive() final {} }; class Benz :public Car { public:virtual void Drive() {cout Benz-舒适 endl;} }; 2. override: 检查派生类虚函数是否重写了基类某个虚函数如果没有重写编译报错 class Car { public:virtual void Drive() {} }; class Benz :public Car { public:virtual void Drive() override { cout Benz-舒适 endl; } }; 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 在虚函数的后面写上 0 则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类也叫接口类抽象类不能实例化出对象。派生类继承后也不能实例化出对象只有重写纯虚函数派生类才能实例化出对象。纯虚函数规范了派生类必须重写另外纯虚函数更体现出了接口继承。 class Car { public:virtual void Drive() 0; }; class Benz :public Car { public:virtual void Drive(){cout Benz-豪华 endl;} }; class BMW :public Car { public:virtual void Drive(){cout BMW-操控 endl;} }; 3.2 接口继承和实现继承 普通函数的继承是一种实现继承派生类继承了基类函数可以使用函数继承的是函数的实现。虚函数的继承是一种接口继承派生类继承的是基类虚函数的接口目的是为了重写达成多态继承的是接口。所以如果不实现多态不要把函数定义成虚函数。 今天的分享到这里就结束了感谢大家的阅读
http://www.zqtcl.cn/news/285068/

相关文章:

  • 装修网站怎么做的外贸谷歌推广怎么样
  • 建设部网站监理资质换证it外包 北京
  • flash网站制作公司杭州便宜的手机网站建设
  • 有ip地址如何做网站苏州门户网站建设
  • 菏泽北京网站建设邯郸做移动网站费用
  • 国外的平面设计网站施工企业介绍
  • 做网站市场价织梦模板自适应
  • xx单位网站建设方案设计精美的网站
  • 唐山市政建设总公司网站工商营业执照查询官网
  • 深圳建站模板建站网站介绍怎么写
  • 网站建设管理教程视频教程如何建一个电商平台
  • 深圳网络公司做网站wordpress怎么编辑网站
  • 淄博建站网络公司wordpress ldap外部登录认证
  • 南宁网站开发浏览器有哪几种
  • 石家庄哪里能制作网站网站301跳转
  • 网站建设报价浩森宇特wordpress怎样修改字体
  • 网站建设预估费用做品牌推广用什么网站
  • 网站建设风险评估西部数码 空间做2个网站
  • 专业购物网站建设wordpress the7不显示分类页
  • 移动应用开发网站建设网站时的故障分类
  • 网站动态静态软件项目管理案例教程第四版
  • 贵州萝岗seo整站优化鲜花店网站建设的总结
  • 下载做网站的软件建网站做站在
  • 无锡高端网站建设公司WordPress臃肿主题
  • 网站建设与运营财务预算seo下拉优化
  • 重庆铜梁网站建设价格阜城网站建设价格
  • 怎样建置换平台网站公众号开发周期
  • 朝阳建设网站什么是网络设计方案网络设计的原则有哪些
  • 长春商城网站制作二级网站建设 知乎
  • 网站建设的结论沭阳县建设局网站