在一个源文件中定义了一个基类,想在另一个源文件中继承它,请问在头文件中如何定义?

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

在一个源文件中定义了一个基类,想在另一个源文件中继承它,请问在头文件中如何定义?

· 网友精彩回答:

发表者:newpuple

很简单拉,将原文件定义成头文件或者就在新文件中include"source   file.cpp",就可以在新文件继承了。

发表者:ronk

我也来添个乐子:)  
   
  1、#include   ""  
        在这里,双引号“”表示预处理器将事先找寻目前所在目录的文件,如果找不到,再找编译器指定的include路径及系统include环境变量指定的路径。  
   
  2、#include   <>  
        如果是<>,表示预处理器直接找寻编译器指定的include路径,在找include环境变量指定的路径;而且,如果<>中写入完整的路径名称,编译器则只会在指定路径下找寻,而不会去系统include路径。

发表者:hyq1986

//   baseclass.h   ////////////////////////////////////  
   
  #ifndef   _baseclass_include_  
  #define   _baseclass_include_  
   
  class   baseclass  
  {  
  public:  
  baseclass(int   d1,   int   d2);  
  void   method1();  
  void   method2();  
  private:  
  int   data1;  
  int   data2;  
  };  
   
  #endif // _baseclass_include_  
   
  //   baseclass.cpp   /////////////////////////////////  
   
  #include   <iostream.h>  
   
  #include   "baseclass.h"  
   
  baseclass::baseclass(int   d1,   int   d2)  
  {  
  data1   =   d1;  
  data2   =   d2;  
  }  
   
  void   baseclass::method1()  
  {  
  cout   <<   data1   <<   \n;  
  }  
   
  void   baseclass::method2()  
  {  
  cout   <<   data2   <<   \n;  
  }  
   
  //   extendclass.h   ///////////////////////////////  
   
  #ifndef   _extendclass_include_  
  #define   _extendclass_include_  
   
  #include   "baseclass.h"  
   
  class   extendclass   :   public   baseclass  
  {  
  public:  
  extendclass(int   d1,   int   d2,   int   d3);  
  void   method3();  
  private:  
  int   data3;  
  };  
   
  #endif // _extendclass_include_  
   
  //   extendclass.cpp   /////////////////////////////  
   
  #include   <iostream.h>  
   
  #include   "extendclass.h"  
   
  extendclass::extendclass(int   d1,   int   d2,   int   d3)   :   baseclass(d1,   d2)  
  {  
  data3   =   d3;  
  }  
   
  void   extendclass::method3()  
  {  
  method1();  
  method2();  
  cout   <<   data3   <<   \n;  
  }  
   
  //   main.cpp   //////////////////////////////////  
   
  #include   "extendclass.h"  
   
  int   main(void)  
  {  
  extendclass   ec(1,   2,   3);  
  ec.method1();  
  ec.method2();  
  ec.method3();  
  return   0;  
  }  
   
  //////////////////////////////////////////  
   
  上面给出了一个简单演示继承的代码,相信已经一目了然了,只要包含父类的声明头文件就可以了  
   
   
   
  上面有位朋友讲到用#include包含c或cpp文件,我想这样是很不好的,和两个cpp写在一个cpp上没区别.  
  文件可以看成一个模块,这样做即使不出编译错误,也是对模块之间低耦合的破坏.  
  如果其中一个cpp文件中含有一个全局变量,则该变量的有效范围有可能扩大到另外一个cpp文件.  
  附:全局变量:函数之外定义的变量是外部变量,称为全局变量(global   variable,也称全程变量).全局变量的有效范围为从定义变量的位置开始到本源文件结束.---<<c++程序设计>>(谭浩强)  
   
  举个错误的例子:  
  在上面代码上加入一个cpp文件  
  //   cppfile.cpp  
  int   a;  
  //   只有一行代码  
  把上面的main.cpp加两行:  
  //   mian.cpp  
  #include   "extendclass.h"  
  #include   "cppfile.cpp"   //   添加的,用#include包含cpp文件  
   
  int   a;   //   添加的  
   
  int   main(void)  
  {  
  extendclass   ec(1,   2,   3);  
  ec.method1();  
  ec.method2();  
  ec.method3();  
  return   0;  
  }  
   
  用vc6编译出错:  
  error   c2086:   a   :   redefinition  
  a被重新定义了  
   
   
  总之h和cpp有不同的用途  
  着方面的内容请看<<高质量c++编程指南>>(林锐)

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved