C++特征之多态
来源:互联网 发布:傻瓜视频制作软件 编辑:程序博客网 时间:2024/05/18 01:43
按值传递对象
#include <iostream>using namespace std;class person{public: int sex; virtual int love(){cout<<"person"<<endl;} person(){cout<<"person construct"<<endl;} virtual ~person(){cout<<"person destroy"<<endl;}};class Employee:public person{public: int love(){cout<<"Employee"<<endl;} Employee(){cout<<"Employee construct"<<endl;}; ~Employee(){cout<<"Employee destroy"<<endl;}};int main(){ //person a; person().love(); Employee().love();}
运行结果:
person construct
person
person destroy
person construct
Employee construct
Employee
Employee destroy
person destroy
从结果可以看出:
1、person类中的love()定义为虚函数,通过声明一个匿名对象来调用love(),则那个类的匿名对象调用那个类的函数,虚函数没体现什么作用,这是多态中的“重定义“(不同对象调用各自类中同名函数)
2、程序运行时,先调用基类构造函数,再调用派生类的构造函数,若先生成派生类的对象,也是先调用积累的构造函数。而后是先析构基类,再析构派生类。
3、声明匿名对象,就是直接调用构造函数,系统自动生成一个对象,只在该代码行中有效,下一行就会被析构。
真正的虚函数是通过指针和引用进行调用的
#include <iostream>using namespace std;class person{public: int sex; virtual int love(){cout<<"person"<<endl;} person(){cout<<"person construct"<<endl;} virtual ~person(){cout<<"person destroy"<<endl;}};class Employee:public person{public: int love(){cout<<"Employee"<<endl;} Employee(){cout<<"Employee construct"<<endl;}; ~Employee(){cout<<"Employee destroy"<<endl;}};int main(){ person* p=new Employee; p->love(); p->love(); delete p;}
运行的结果:
person construct
Employee construct
Employee
Employee
Employee destroy
person destroy
调用的函数的是派生类中的love(),基类中的love()被覆盖了。
但要把指针指向的在自由存储空间构造的对象类型更改:
person* p=new person;
则结果为:
person construct
person
person
person destroy
都没有构造Employee对象
BUT 把virtual去掉后
#include <iostream>using namespace std;class person{public: int sex; int love(){cout<<"person"<<endl;} person(){cout<<"person construct"<<endl;} ~person(){cout<<"person destroy"<<endl;}};class Employee:public person{public: int love(){cout<<"Employee"<<endl;} Employee(){cout<<"Employee construct"<<endl;}; ~Employee(){cout<<"Employee destroy"<<endl;}};int main(){ person* p=new Employee; p->love(); p->love(); delete p;}
运行的结果:
person construct
Employee construct
person
person
person destroy
调用的是基类(父类)中的love(),
在动态申请内存时候 在自由空间构造一个Employee类型的对象,并且返回了指向该对象父类类型的指针。
- C++特征之多态
- 面向对象特征之多态
- c#面向对象特征(2)之多态
- 面向对象三大特征之多态
- 0811 Java面向对象特征之多态
- JAVA三大特征之多态
- OOP之多态 【C#】
- objective-c之多态
- objective-c之多态
- 【C#】面向对象之多态
- java面向对象三大特征之多态
- 面向对象在javascript中的三大特征之多态
- java对象的三大特征之多态
- 第三十一、Java面向对象三大特征之多态
- Java面向对象三大特征之多态
- Java面向对象三大特征之多态
- C#——面向对象之多态
- 黑马程序员 Java自学总结八 面向对象三个特征之多态
- C/C++ 语法高阶:const应用专题
- iOS中傻傻分不清楚的一些定义
- ubuntu下编译VLC源码
- Orange,RapidMiner,Weka,JHepWork,KNIM,五个免费开源的数据挖掘软件
- 【练习1】输出一个螺旋数组,可以很好地理解数组和指针的使用
- C++特征之多态
- 数据挖掘入门必看10个问题
- cornerstone的使用注意
- UIScrollView无法滚动解决办法
- mysql 置顶查询和置末查询的实现思路
- 二路归并排序
- Android Studio 将本地开源库导入到自己的项目中使用(小记)
- Hbase 与 传统关系数据库(RDBMS)的比较
- Linux crontab定时执行任务 命令格式与详细例子