♣
在一个源文件中定义了一个基类,想在另一个源文件中继承它,请问在头文件中如何定义?
在一个源文件中定义了一个基类,想在另一个源文件中继承它,请问在头文件中如何定义?
· 网友精彩回答:
很简单拉,将原文件定义成头文件或者就在新文件中include"source file.cpp",就可以在新文件继承了。
我也来添个乐子:)
1、#include ""
在这里,双引号“”表示预处理器将事先找寻目前所在目录的文件,如果找不到,再找编译器指定的include路径及系统include环境变量指定的路径。
2、#include <>
如果是<>,表示预处理器直接找寻编译器指定的include路径,在找include环境变量指定的路径;而且,如果<>中写入完整的路径名称,编译器则只会在指定路径下找寻,而不会去系统include路径。
// 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++编程指南>>(林锐)
- 更多问题:
- · 在企业管理器中一个数据库变成灰色旁边写了个质疑,该怎么办?
- · 数据从另一个页面传来之后,如何正确应用到查询语句中,帮帮忙,着急中...一定给分,谢谢
- · 最近想做一个电影网站,了解一下这方面的情况
- · 怎样在一个后台程序(指没有界面的程序)实现消息循环啊?
- · 一个sql语句
- · 急!!!!php连mysql数据库老是连不上。求助!
- · 加密解密问题
- · 考试中间遇到的一个问题,觉得参考答案有点奇怪,请大家帮忙解答~~~
- · 如何识别所访问的http服务器是否是IIS?
- · [借水园人气]哪位有关于作业控制语言(JCL)的中文资料,给偶发一份吧。
- · 我将常用的用户信息保存在cache中:HttpRuntime.Cache.Insert(key, item);但怎样可修改它而不影响其它用户对它的访问?
- · 手机游戏开发的群2876441
- · 谁有抽奖类的源码啊?就是抽身份证号、手机号等的那种,主要想要数字的滚动效果
- · 创业
- · 帮忙介绍一些学习使用图表(graph)的网址,谢谢!
- · 关于2个数据库进行更新的问题。

