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

国家建设部网站查询有网站源代码 怎么样建设网站

国家建设部网站查询,有网站源代码 怎么样建设网站,免费建设网站有哪些,it外包合同范本⭐上篇文章:27.C继承 3 (复杂的菱形继承与菱形虚拟继承)-CSDN博客 ⭐本篇代码:c学习/17.C三大特性-多态 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分 目录 一. C多态简介 1.1 构成多态的两个必要条件 二. vir…

⭐上篇文章:27.C++继承 3 (复杂的菱形继承与菱形虚拟继承)-CSDN博客

⭐本篇代码:c++学习/17.C++三大特性-多态 · 橘子真甜/c++-learning-of-yzc - 码云 - 开源中国 (gitee.com)

⭐标⭐是比较重要的部分

目录

一. C++多态简介

1.1 构成多态的两个必要条件 

二. virtual关键字与虚函数 ⭐

 1.1 使用虚函数测试多态

1.2 virtual关键字的用法

三. 虚函数重写的两个例外 

3.1 协变

3.2 析构函数 ⭐

四. final 和 override关键字 

        4.1 final 

4.2 override 


一. C++多态简介

        多态是指不同有继承关系的对象在调用同一个函数之后,会有不同的结果。比如学生票和成人票。

        Student继承了Person,但是Studenet买票是半价,而Person是全价

1.1 构成多态的两个必要条件 

1 必须通过基类的指针或者引用去调用虚函数

2 被调用的函数必须是虚函数,且派生类必须完成对虚函数的重写

二. virtual关键字与虚函数 ⭐

        用virtual修饰的成员函数就是虚函数

比如:下面代码中的buyTickets就是虚函数

#include <iostream>
using namespace std;class Person
{
public:virtual void buyTickets(){cout << "全价买票" << endl;}
};int main()
{}

 1.1 使用虚函数测试多态

        

#include <iostream>
using namespace std;class Person
{
public:virtual void buyTickets(){cout << "全价买票" << endl;}
};class Student : public Person
{
public:virtual void buyTickets(){cout << "半价买票" << endl;}
};void test(Person& tmp)
{tmp.buyTickets();
}int main()
{Person p1;Student s1;Person* tmp1 = &p1;Student* tmp2 = &s1;//测试指针cout << "使用指针完成多态" << endl;tmp1->buyTickets();tmp2->buyTickets();//测试引用cout << "使用引用完成多态" << endl;test(p1);test(s1);return 0;
}

测试结果如下:

        可以看到,我们使用基类的指针或者引用成功的调用了基类和派生类的函数,从而达到一种多态的效果 

1 如果两个有继承关系的成员函数满足多态的条件,指针指向哪个对象或者引用哪个对象就调用这个对象的成员函数

2 如果不满足多态条件,调用的类型对象是谁,就调用该对象的成员函数

3 重写的虚函数需要保持返回值类型,名称,参数列表都一致

1.2 virtual关键字的用法

1 virtual修饰类的继承中,完成虚继承,解决菱形继承中的冗余性和二义性

2 virtual修饰成员函数,变为虚函数完成函数的重写

三. 虚函数重写的两个例外 

3.1 协变

        如果派生类重写虚函数的时候,两个函数的返回值类型不同,但是都为本身类的指针或者引用的时候。也构成虚函数的重写

如下面的代码,基类返回基类的指针,派生类返回派生类的指针 

#include <iostream>
using namespace std;class Person
{
public:virtual Person* buyTickets(){cout << "全价买票" << endl;return this;}
};class Student : public Person
{
public:virtual Student* buyTickets(){cout << "半价买票" << endl;return this;}
};void test(Person& tmp)
{tmp.buyTickets();
}int main()
{Person p1;Student s1;Person* tmp1 = &p1;Student* tmp2 = &s1;//测试指针cout << "使用指针完成多态" << endl;tmp1->buyTickets();tmp2->buyTickets();//测试引用cout << "使用引用完成多态" << endl;test(p1);test(s1);return 0;
}

3.2 析构函数 ⭐

        如果有继承关系,并且我们需要使用多态的时候。需要使用virtual修饰析构函数,将其定义为虚函数。        

        否则当我们使用基类的指针或者引用之后,销毁这个变量的时候就会由于隐藏只调用当前对象的析构函数。

比如:

#include <iostream>
using namespace std;class A
{
public:virtual void test(){}~A() { cout << " ~A()" << endl; }
};
class B :public A
{
public:virtual void test() {}~B() { cout << " ~B()" << endl; }
};int main()
{//使用多态A* a = new A();A* b = new B();a->test();b->test();//删除变量delete a;delete b;return 0;
}

        在上面的代码中,我们使用多态去调用test。然后使用delete删除变量。正常来说,析构函数的调用顺序是 ~A ()        ~B()         ~A()

测试结果如下:

        可以看到,只调用了A的析构函数。这是因为我们没有对析构函数进行虚函数重写,导致B类的析构函数和A类的析构函数构成隐藏,又由于我们的指针定义的时候是A,所以不会调用B的析构函数,从而导致内存泄漏

对析构函数进行重写

#include <iostream>
using namespace std;class A
{
public:virtual void test(){}virtual ~A() { cout << " ~A()" << endl; }
};
class B :public A
{
public:virtual void test() {}virtual ~B() { cout << " ~B()" << endl; }
};int main()
{//使用多态A* a = new A();A* b = new B();a->test();b->test();//删除变量delete a;delete b;return 0;
}

可以看到,成功的调用了B的析构函数。解决了内存泄漏问题

四. final 和 override关键字 

        4.1 final 

final有两个用法

final修饰类,这个类不能被继承。

final修饰成员函数,这个成员函数不能被重写

修饰虚函数 

 修饰类

 

4.2 override 

        override修饰成员函数,会检查这个成员函数是否重写了父类的函数,如果不构成重写,就会显示报错

举例:

#include <iostream>
using namespace std;class A 
{
public:virtual void test(){}void f(){}
};class B :public A
{
public:virtual void  test() override {}virtual void f()override
};int main()
{return 0;
}

无法通过编译 


文章转载自:

http://cBd1yBq8.gctkk.cn
http://m1gKh4Sc.gctkk.cn
http://dXNQ6d7g.gctkk.cn
http://QWgY5uRh.gctkk.cn
http://IojpEK1J.gctkk.cn
http://aporuSEt.gctkk.cn
http://FNf3wo1G.gctkk.cn
http://GVnuGNPz.gctkk.cn
http://3vbeJBxv.gctkk.cn
http://0byLPVs2.gctkk.cn
http://ucBYTV5F.gctkk.cn
http://QPhMHawh.gctkk.cn
http://GlnWILAf.gctkk.cn
http://n4qz4PcT.gctkk.cn
http://KlaZOpRF.gctkk.cn
http://sZ1wK1a1.gctkk.cn
http://V4Mxta28.gctkk.cn
http://VbBYjlhT.gctkk.cn
http://WkD3LUJS.gctkk.cn
http://xZTZORgt.gctkk.cn
http://Wmg8AlFA.gctkk.cn
http://RJGiTytE.gctkk.cn
http://2JMnCTGM.gctkk.cn
http://z92A0bqi.gctkk.cn
http://mQxSvZk8.gctkk.cn
http://BJdrFGub.gctkk.cn
http://8y2KC9ma.gctkk.cn
http://xso4SlNf.gctkk.cn
http://wqC2WeKC.gctkk.cn
http://wHxpvNPX.gctkk.cn
http://www.dtcms.com/wzjs/724043.html

相关文章:

  • 网站开发技术网站开发设计项目书
  • 网站开发需要用到哪些技术榆次做网站
  • 成都网站制作创新互联山东手机网站建设报价
  • 广东建设信息网站建设银行网站注册用户名
  • 网站可以做315认证吗电商有创意名字
  • asp网站域名网站推广策划方案模板
  • 广告制作网站建网站那个网最好
  • 临沂手机网站制作网站域名商
  • 北京自助模板建站网站开发费用预算
  • 网站服务器空间南山制作网站
  • 京东的网站是哪家公司做做网站的工作时间
  • 请科技公司做网站需要注意什么如何在google上免费推广
  • 微动网站建设做网站爱
  • 企业网站优化兴田德润优惠公司网站设计方案
  • 连锁品牌网站建设怎么做自己的单页网站
  • 杭州建站模板外国设计师素材网站
  • php 如何在网站根目录创建文件夹wordpress数据表位置
  • mip 网站网站响应时间多久
  • 网站空间过期怎么用dw制作网站
  • 南京江宁做网站网站百科推广怎么做
  • 网站建设需求分析范例官网最新版cmsv6
  • 宁夏公司网站怎么做网站建设
  • 五矿瑞和上海建设有限公司网站完全静态化成wordpress
  • 深圳做网站最好的公哪个网站做网销更好
  • 承包网站建设的公司外贸网站设计公司价格
  • 网站新闻字体汇天网络科技有限公司
  • 创建网站用突唯阿做响应式网站新能源汽车价格走势
  • 查网站是否正规大作设计app
  • 垂直网站内容建设做电影网站怎么接广告
  • 沈阳大型网站建设网页界面设计想法