读书频道 > 网站 > 网页设计 > Visual C++入门很简单
3.示例
13-08-22    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > Visual C++入门很简单

本书介绍Visual C++的函数调用形式、面向对象编程、MFC工作原理、开发软件流程及一些实用开发技巧。全书共15章,分为4篇。第1篇介绍Visual C++开发环境、C++语法基础及MFC运行机制;第2篇介绍利用Visual Stud...立即去当当网订购

了解虚函数的基本形式和它的功能作用后,读者请看代码3-1(由图3.8 写出的例子),运行结果如图3.22 所示。

 

代码3-1  虚函数应用示例:thi_solu3.cpp
01 #include <iostream>
02  using namespace std;
03 
04 
05 class Human//基类
06 {
07 public:
08   virtual void Move(){cout<<"人类移动方式"<<endl;}  //基类虚函数
09 };
10 
11  class Person_jia : public Human  //派生自Human的子类
12 {
13 public:
14   /
**
virtual
*
/ void Move() {cout<<" 路人甲采用步行移动"<<endl;}
          //重新定义Move()
15 };
16 
17  class Person_yi : public Human   //派生自Human的子类
18 {
19 public:
20   /
**
virtual
*
/ void Move() {cout<<" 路人乙采用乘公交移动"<<endl;}
          //重新定义Move()
21 };
22 
23  class Num1_bus : public Person_yi  //派生自Person_yi 的子类
24 {
25 public:
26   /
**
virtual
*
/ void Move() {cout<<" 路人乙采用乘916 路公交移动"<<endl;}
          //重新定义Move()
27 };
28 
29  class Num2_bus : public Person_yi  //派生自Person_yi 的子类
30 {
31 public:
32   /
**
virtual
*
/ void Move() {cout<<" 路人乙采用乘12路公交移动"<<endl;}
          //重新定义Move()
33 };
34 
35  class Person_bing : public Human  //派生自Human的子类
36 {
37 public:
38   /
**
virtual
*
/ void Move() {cout<<" 路人丙采用开QQ车移动"<<endl;}
          //重新定义Move()
39 };
40 
41 int main()
42 {
43  Person_jia fangshi1;   //Person_jia 类实例化
44  Person_yi   fangshi2;   //Person_yi 类实例化
45    Num1_bus     fangshi3;   //Num1_bus 类实例化
46    Num2_bus     fangshi4;   //Num2_bus 类实例化
47  Person_bing fangshi5;   //Person_bing类实例化
48 
49   Human
*
human[5] = {&fangshi1, &fangshi2, &fangshi3, &fangshi4, 
  &fangshi5};      //定义一个
50 Human
* 数组并初始化
51    for(int i = 0; i< 5; i++)    //循环输出
52   {
53     human[i]->Move();
54   }
55 
56   return 0;
57 }

因为由图3.21 可看出观众的视线存在被引导的问题,同理有虚函数的基类要声明的是1 个指针对象(在过程中指针可以引导指向不同的实例),而不是实例化对象,像第49行。

另外还有一个纯虚函数,具体代码如下:
class Human       //基类
{
public:
  virtual void Move() = 0;     //基类纯虚函数定义方式
};

定义纯虚函数的意义所在是基类的成员函数没有定义的必要,即它的存在没有实际意义,只不过是一个抽象出来的概念。举个例子,世界上没有“水果”这种物体,它只不过是梨、香蕉、苹果等的一个总称,或只是一种被抽象的概念。就像代码中Human 类中的Move函数指人类的移动方式,但没有一个具体的工具可以代替这种方式,所以定义它也就显得没有必要。

既然基类中的除了构造函数以外所有函数都可以被“虚”,那析构函数当然也可以。但如果基类的析构函数被“虚”,它子类的析构函数无论前面有无 virtual 也被自动定义为虚函数(尽管它俩的函数名不一样)。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站