对C++虚函数、虚函数表的简单理解
2016-06-18 17:30
399 查看
一、虚函数的作用
以一个通用的图形类来了解虚函数的定义,代码如下:
输出如下,
![](https://images2015.cnblogs.com/blog/777957/201606/777957-20160618172911323-606455473.png)
该代码的作用是,设计不同的类去处理不同的图形,所有类继承于同一个Graph类。但是每个图形类都有一个相同的函数showArea。如果有需求是输出多个图形的面积,如果没有虚函数,就需要给每一种图形设计一个数组,然后每种图形分别处理。但是有了虚函数后,不管是什么图形,都只要设计一个Graph数组,然后调用每个成员的showArea函数即可。
示例代码:
输出结果:
![](https://images2015.cnblogs.com/blog/777957/201606/777957-20160618172912260-1374783846.png)
为什么会有这样的效果呢?原因就是有虚函数表。
#include "stdafx.h" #include <iostream> using namespace std; class Graph { protected: double x; double y; public: Graph(double x,double y) { this->x=x; this->y=y; } virtual void showArea() { cout<<"计算图形面积"<<endl; } }; class Rectangle:public Graph { public: Rectangle(double x,double y):Graph(x,y){}; virtual void showArea() { cout<<"矩形面积为:"<<x*y<<endl; } }; class Triangle:public Graph { public: Triangle(double d,double h):Graph(d,h){}; virtual void showArea() { cout<<"三角形面积为:"<<x*y*0.5<<endl; } }; class Circle:public Graph { public: Circle(double r):Graph(r,r){}; virtual void showArea() { cout<<"圆形面积为:"<<3.14*x*y<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { Graph *graph; Rectangle rectangle(10,5); graph=&rectangle; graph->showArea(); Triangle triangle(5,2.4); graph=▵ graph->showArea(); Circle circle(2); graph=&circle; graph->showArea(); return 0; }
输出如下,
![](https://images2015.cnblogs.com/blog/777957/201606/777957-20160618172911323-606455473.png)
该代码的作用是,设计不同的类去处理不同的图形,所有类继承于同一个Graph类。但是每个图形类都有一个相同的函数showArea。如果有需求是输出多个图形的面积,如果没有虚函数,就需要给每一种图形设计一个数组,然后每种图形分别处理。但是有了虚函数后,不管是什么图形,都只要设计一个Graph数组,然后调用每个成员的showArea函数即可。
示例代码:
Graph* gArray[3]; gArray[0] = &rectangle; gArray[1] = ▵ gArray[2] = &circle; for (int i = 0;i < 3;i++) { gArray[i]->showArea(); }
输出结果:
![](https://images2015.cnblogs.com/blog/777957/201606/777957-20160618172912260-1374783846.png)
为什么会有这样的效果呢?原因就是有虚函数表。
二、虚函数表
相关文章推荐
- c/c++字符串处理大集合
- 最小生成树之Kruskal和Prim算法——C++实现
- POJ 3687 Labeling Balls-拓扑排序
- C++独孤九剑第六式——洞若观火(深入对象操作)
- 二维数组指针
- 匈牙利算法c++代码
- C语言中可变参数函数实现原理
- C++ switch语句后表达式的类型,vs2015试过
- 用c语言实现求一个字符串长度的函数
- C++14 make_index_sequence原理
- C++面向对象总结(二)--友元函数
- C++工厂模式详解——设计模式(2)
- C++11中的 "enable_if"小记
- c++中的const
- Problem G: C语言习题 n个数逆序
- 对于C++中traits的简单介绍
- Problem E: C语言习题 矩形法求定积分
- Problem D: C语言习题 矩阵元素变换
- Problem C: C语言习题 整数排序
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案