当前位置:编程学习 > 网站相关 >>

C++头文件重复定义问题的处理

来源:html" target=_blank>baidu blog

在设计一个类的时候,通常是将类的定义及类成员函数的声明放到头文件(即.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所示。
Highslide JS
图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所示。
Highslide JS
图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()
 
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,