#include <iostream>
using namespace std; #define cendl cout << endl; class AA{//这是一个纯虚函数
public :
virtual void fun() = ;
}; class A{
int data_a;
public:
A(){
data_a = ;
cout << "A " ;
}
A(int a){
data_a = a;
cout << "A(a) " ;
}
void show(){
cout << data_a<<' ' ;
}
virtual void fun(){
cout << "this is A ";
}
~A(){
cout << "~A " ;
}
};
class B : public A{
int data_b;
public:
B(){
data_b = ;
cout << "B " ;
}
B(int a, int b) :A(a){
data_b = b;
cout << "B(a) " ;
}
void show(){
A::show();
cout << data_b << ' ';
}
virtual void fun(){
cout << "this is B ";
}
~B(){
cout << "~B " ;
}
};

class C :public A{
int data_c;
public:
C(){ data_c = 3; cout << "C " ; }
C(int a, int b) :A(a){
data_c = b;
cout << "C(a) " ;
}
void show(){
A::show();
cout << data_c << ' ';
}
virtual void fun(){
cout << "this is C ";
}
~C(){
cout << "~C " ;
}
};

int main()

{

A *a1 = new A(2);
cendl;
A *a2 = new B(2,3);
cendl;
A *a3 = new C(2, 3);
cendl;
a1->fun();
cendl;
a2->fun();
cendl;
a3->fun();
cendl;
delete a1;
cendl;
delete a2;
cendl;
delete a3;
system("pause");
return 0;

}

虚函数的作用主要是用作多态,定义一个基类的指针指向子类,可以产生不同的调用效果。如上面的程序输出如下:

可以看出同样是基类的指针但是指向不用的子类是调用的是各个子类的fun函数。同时在delete的时候都是调用A的析构函数,没有调用子类的构造函数,不知道这是为啥。

最新文章

  1. hihoCoder 1196 高斯消元&#183;二
  2. Windows 更改桌面位置
  3. oracle 用户创建这个挺靠谱
  4. SCI Index
  5. angular $http配置属性
  6. 线性回归&amp;&amp;code
  7. ASP.NET Web API 全局权限和全局异常处理
  8. endsWith和startsWith同样效果其他形式的写法(2016.1.12)
  9. (转)linux下mysql的安装过程
  10. java初学的几个问题
  11. Win7下安装Ubuntu双系统常见问题
  12. PHPexcel 判断日期类型
  13. js把通过图片路径生成base64
  14. ubuntu中gdb调试工具的使用
  15. 501. Find Mode in Binary Search Tree
  16. notepad++安装nppFTP
  17. 【Git】vs code+git 不使用ssh的链接remote server的方式
  18. java获取当前项目或类路径
  19. 在Android Native层中创建Java虚拟机实例
  20. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

热门文章

  1. usb端口号绑定
  2. android 混淆导致友盟反馈出错
  3. VS 自动添加注释
  4. Bash shell的内建命令:type
  5. VisualSVN-5.1.4补丁原创发布
  6. C++ 之 新式转型操作符
  7. SQL Server 内置函数、临时对象、流程控制
  8. ThinkPHP(3)SQL查询语句
  9. 第三章 Git使用入门
  10. 常见的getchar 与EOF的问题