当前位置:主页   - 电脑 - 程序设计 - C/C++
C++类的设计习惯及头文件重复包含问题的解决
来源:网络   作者:   更新时间:2012-02-15
收藏此页】    【字号    】    【打印】    【关闭

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

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

C++类的设计习惯及头文件重复包含问题的解决

  图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所示。

C++类的设计习惯及头文件重复包含问题的解决

  图2.17 添加头文件和源文件到工程中

  代码如例2-24所示。

  例2-24

  animal.h
  //在头文件中包含类的定义及类成员函数的声明
  class animal
  {
  public:
    animal();
    ~animal();
    void eat();
    void sleep();
    virtual void breathe();
  };
animal.cpp
  //在源文件中包含类中成员函数的实现
  #include "animal.h"     //因为在编译animal.cpp时,编译器不知道animal到底是什么,所以要包含animal.h,这样,编译器就知道animal是一种类的类型
  #include <iostream.h>    //在包含头文件时,<>和""有什么区别?<>和""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录;
                ""是表示先从当前目录搜索,然后是系统目录和PATH环境变量所列出的目录。所以如果我们知道头文件在系统目录下就可以直接用<>,这样可以加快搜索速度
  animal::animal()      //::叫做作用域标识符,用于指明一个函数属于哪个类或一个数据成员属于哪个类。
::前面如果不跟类名,表示是全局
  {              函数(即非成员函数)或全局数据
  }             
  animal::~animal()
  {
  }
  void animal::eat()     //注意:虽然我们在函数体中什么也没写,但仍然是实现了这个函数
  {
  }
  void animal::sleep()
  {
  }
  void animal::breathe()   //注意,在头文件(.h文件)中加了virtual后,在源文件(.cpp文件)中就不必再加virtual了
  {             
    cout<<"animal breathe"<<endl;
  }
  fish.h
  #include "animal.h"     //因fish类从animal类继承而来,要让编译器知道animal是一种类的类型,就要包含animal.h头文件
  class fish:public animal
  {
  public:
     void breathe();
  };
  fish.cpp
  #include "fish.h"
  #include <iostream.h>
  void fish::breathe()
  {
    cout<<"fish bubble"<<endl;
  }
EX10.cpp
  #include "animal.h"
  #include "fish.h"
  void fn(animal *pAn)
  {
    pAn->breathe();
  }
  void main()
  {
    animal *pAn;
    fish fh;
    pAn=&fh;
    fn(pAn);
  }

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明