c++_Virtual用法_第1页
c++_Virtual用法_第2页
c++_Virtual用法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、virtual 用法#includeusingnamespacestd;classApublic:virtualvoiddisplay()coutAENDL;classB:publicApublic:voiddisplay()coutBdisplay();deletep;intmain(intargc,char*argv)doDisplay(newB();return0;这段代码打印岀的结果为 B, 但是当把 A 类中的 virtual 去掉之后打印岀的就为 A。 当基类中没有 virtual 的时候,编译器在编译的时候把 p 看做 A 类的对象,调用的自然就是 A 类的方法。但是加上 vir

2、tual 之后,将 dispaly 方法变成了虚方法,这样调用的时候编译器会看调用的究竟是谁的实例化对象,这样就实现了多态的效果。也就是说,当基类的派生类中有重写过基类的虚方法的时候,使用基类的指针指向派生类的对象,调用这个方法实际上调用的会是派生类最后实现的方法virtual 用法二#includeusingnamespacestd;classPersonpublic:Person()coutPerson构造ENDL;Person()coutPerson析构ENDL;classTeacher:virtualpublicPersonpublic:Teacher()coutTeacher构造EN

3、DL;Teacher()outTeacher析构ENDL;classStudent:virtualpublicPersonpublic:Student()coutStudent构造ENDL;Student()coutStudent析构ENDL;classTS:publicTeacher,publicStudentpublic:TS()coutTS构造ENDL;TS()coutTS析构ENDL;intmain(intargc,char*argv)TSts;return0;这段代码的终端输出结果为:Person 构造Teacher 构造Student 构造TS 构造TS 析构Student 析构T

4、eacher 析构Person 析构当 Teacher 类和 Student 类没有虚继承 Person 类的时候,也就是把 virtual 去掉时候终端输岀的结果为:Person 构造Teacher 构造Person 构造Student 构造TS 构造TS 析构Student 析构Person 析构Teacher 析构Person 析构大家可以很清楚的看到这个结果明显不是我们所期望的。我们在构造 TS 的时候需要先构造他的基类,也就是 Teacher 类和 Student 类。而 Teacher 类和 Student 类由都继承于 Person 类。这样就导致了构造 TS 的时候实例化了两个

5、 Person 类。 同样的道理, 析构的时候也是析构了两次 Person 类, 这是非常危险的,也就引发岀了 virtual 的第三种用法,虚析构。virtual 用法三#includeusingnamespacestd;classPersonpublic:Person()name=newchar16;coutPerson构造ENDL;virtualPerson()deletename;coutPerson析构ENDL;private:char*name;classTeacher:virtualpublicPersonpublic:Teacher()coutTeacher构造ENDL;Tea

6、cher()coutTeacher析构ENDL;classStudent:virtualpublicPersonpublic:Student()coutStudent构造ENDL;Student()coutStudent析构ENDL;classTS:publicTeacher,publicStudentpublic:TS()coutTS构造ENDL;TS()coutTS析构ENDL;intmain(intargc,char*argv)Person*p=newTS();deletep;return0;这段代码的运行结果为:Person 构造Teacher 构造Student 构造TS 构造TS 析构Student 析构Teacher 析构Person 析构但是当我们把 Person 类中析构前面的 virtual 去掉之后的运行结果为:Person 构造Teacher 构造Student 构造TS 构造Person 析构程序崩溃很明显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论