设为首页 加入收藏

TOP

2.2.10 C++类的设计习惯及头文件重复包含问题的解决(1)
2013-10-07 15:21:32 来源: 作者: 【 】 浏览:66
Tags:2.2.10 设计 习惯 文件 重复 包含 问题 解决

2.2.10  C++(www.cppentry.com)类的设计习惯及头文件重复包含问题的解决(1)

在设计一个类的时候,通常是将类的定义及类成员函数的声明放到头文件(即.h文件)中,将类中成员函数的实现放到源文件(即.cpp)中。对于animal类需要animal.h和animal.cpp两个文件,同样,对于fish类需要fish.h和fish.cpp。对于main()函数,我们把它单独放到EX10.cpp文件中。

往一个现有工程添加头文件(.h文件)或源文件(.cpp文件)有两种方式:一种是在打开的工程中,单击【File】→【New】,在左边的Files标签页下,选择C++(www.cppentry.com) Header File或C++(www.cppentry.com) Source File,然后在右边的File文本框中,输入头文件或源文件的文件名,如animal.h或animal.cpp,单击【OK】按钮。如图2.16所示。

 
(点击查看大图)图2.16  新建头文件或源文件
另一种方式是在EX10的工程目录下,单击鼠标右键,选择【新建】→【文本文档】,然后将"新建文本文档.txt"改名为"animal.h"(因.h和.cpp文件都是文本格式的文件),依同样的方法,建立animal.cpp、fish.h、fish.cpp三个文件,然后在打开的工程中,选择【Project】→【Add To Project】→【Files】,选择animal.h、animal.cpp、fish.h、fish.cpp这四个文件,单击【OK】按钮,如图2.17所示。
 
图2.17  添加头文件和源文件到工程中

代码如例2-24所示。

例2-24

  1. //在头文件中包含类的定义及类成员函数的声明  
  2. class animal  
  3. {  
  4. public:  
  5.     animal();  
  6.     ~animal();  
  7.     void eat();  
  8.     void sleep();  
  9.     virtual void breathe();  
  10. };  
  11.  
  12. animal.cpp  
  13. //在源文件中包含类中成员函数的实现  
  14.  
  15. #include "animal.h"         //因为在编译animal.cpp时,编译器不知道animal到底  
  16.                             是什么,所以要包含animal.h,这样,编译器就知道animal  
  17.                             是一种类的类型  
  18. #include <iostream.h>       //在包含头文件时,<>和""有什么区别?<>和""表示编译器  
  19.                             在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,  
  20.                             然后再搜索PATH环境变量所列出的目录,不搜索当前目录;  
  21.                             ""是表示先从当前目录搜索,然后是系统目录和PATH环境变  
  22.                             量所列出的目录。所以如果我们知道头文件在系统目录下,  
  23.                             就可以直接用<>,这样可以加快搜索速度  
  24. animal::animal()            //::叫做作用域标识符,用于指明一个函数属于哪个类或一  
  25.                             个数据成员属于哪个类。::前面如果不跟类名,表示是全局  
  26. {                           函数(即非成员函数)或全局数据  
  27. }                             
  28.  
  29. animal::~animal()  
  30. {  
  31. }  
  32.  
  33. void animal::eat()          //注意:虽然我们在函数体中什么也没写,但仍然是实现了  
  34.                             这个函数  
  35. {  
  36. }  
  37.  
  38. void animal::sleep()  
  39. {  
  40. }  
  41.  
  42. void animal::breathe()      //注意,在头文件(.h文件)中加了virtual后,在源文  
  43.                             件(.cpp文件)中就不必再加virtual了  
  44. {                             
  45.  
  46.     cout<<"animal breathe"<<endl;  
  47. }  
  48.  
  49. fish.h  
  50. #include "animal.h"         //因fish类从animal类继承而来,要让编译器知道  
  51.                             animal是一种类的类型,就要包含animal.h头文件  
  52. class fish:public animal  
  53. {  
  54. public:  
  55.      void breathe();  
  56. };  
  57.  
  58. fish.cpp  
  59. #include "fish.h"  
  60. #include <iostream.h> 
  61. void fish::breathe()  
  62. {  
  63.     cout<<"fish bubble"<<endl;  
  64. }  
  65.  
  66. EX10.cpp  
  67. #include "animal.h"  
  68. #include "fish.h"  
  69. void fn(animal *pAn)  
  70. {  
  71.     pAn->breathe();  
  72. }  
  73. void main()  
  74. {  
  75.     animal *pAn;  
  76.     fish fh;  
  77.     pAn=&fh;  
  78.     fn(pAn);  
  79. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.10 C++类的设计习惯及头文件.. 下一篇百度笔试题,malloc/free与new/de..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: