C++虚函数&纯虚函数学习笔记
来源:互联网 发布:类似程序员客栈 编辑:程序博客网 时间:2024/04/29 12:35
虚函数是基类的成员函数之一。当使用此基类创建派生类时,子类要重新定义此函数以满足自己的特殊要求。
通过对象来访问虚函数的方式与以往相同,然而通过指针来访问虚函数就会体现其真正强大之处。
我定义如下类来测试非虚函数和虚函数的区别:
class Shape
{
public:
void WhatIsIt(){cout<<"/n这个基类的非虚函数!/n";}
virtual void WhatAmI(){cout<<"/n这是基类的基本形状虚函数!/n";}
};
class Pyramid:public Shape
{
public:
void WhatIsIt(){cout<<"/n这是子类的非虚函数!/n";}
void WhatAmI(){cout<<"/n这是子类的虚函数!/n";}
};
int main(int argc, char *argv[])
{
Shape *pShape[3],*pLShape,OneShape,TwoShape;
Pyramid ThreeShape,*pPyramid;
int i;
pShape[0]=&OneShape;
pShape[1]=&TwoShape;
pShape[2]=&ThreeShape;
pLShape=&ThreeShape;
pPyramid=&ThreeShape;
cout<<"/n下面是非虚函数的指针调用/n";
for(i=0;i<3;i++) pShape[i]->WhatIsIt();
pLShape->WhatIsIt();
pPyramid->WhatIsIt();
cout<<"/n下面是虚函数的指针调用/n";
for(i=0;i<3;i++) pShape[i]->WhatAmI();
pLShape->WhatAmI();
pPyramid->WhatAmI();
system("PAUSE");
return 0;
}
输出结果:
下面是非虚函数的指针调用
这个基类的非虚函数!
这个基类的非虚函数!
这个基类的非虚函数!
这个基类的非虚函数!
这个子类的非虚函数!
下面是虚函数的指针调用
这个基类的非虚函数!
这个基类的非虚函数!
这个子类的非虚函数!
这个子类的非虚函数!
这个子类的非虚函数!
结果很清晰:
当指针被定义为基类类型时,用指向子类对象的指针来调用非虚函数,结果是调用的基类成员函数。但是当同个指针调用
虚函数时,则调用的是对应的子类对象虚函数。
就是说通过虚函数可以方便的遍历执行不同子类对象的成员函数(虚函数)。
纯虚函数:基类中没有函数体的虚函数
定义形式如下:
class Shape
{
public:
virtual void WhatAmI() =0;//纯虚函数
}
- c++学习笔记之纯虚函数
- 【C/C++】纯虚函数
- C++虚函数&纯虚函数学习笔记
- 【学习笔记】虚函数与多态性,纯虚函数
- 学习笔记(二):虚函数与纯虚函数
- Learn Objective‐C,学习笔记04 协议(Java中的接口,c中的纯虚函数)
- [C++]虚函数与纯虚函数
- C++: 浅谈虚函数、纯虚函数
- C++::关于虚函数,纯虚函数
- [C++]虚函数和纯虚函数
- c++-虚函数与纯虚函数
- C++ 虚函数、纯虚函数笔记
- C++(笔记)纯虚函数(抽象类)
- C++学习笔记之:纯虚函数使用方法
- C++学习笔记:纯虚函数和抽象类
- 达内学习笔记——纯虚函数
- VC++入门经典学习笔记--纯虚函数
- C++学习笔记--抽象类-纯虚函数
- java中正则表达式运用实例(用String类的matches方法演示)
- 新开启的工作博客
- ¥%……&&
- POJ 2479 + POJ 2593(DP 最大双子序列 ^_^)
- GWT运行Junit时遇到的问题
- C++虚函数&纯虚函数学习笔记
- 8768678
- 在线播放器代码大全(avi/mpg/rm/wmv/)
- in isoftstone
- 整理 使用usb术语详解
- centos : 没有那个文件或目录: '/media/CentOS/repodata/repomd.xml
- POJ 1149 PIGS(网络流—最大流)
- 在asp.net下调用dos命令 :我用的是调用重定向写入一个文件
- 爱情IT