在设计一个类的时候,通常是将类的定义及类成员函数的声明放到头文件(即。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所示。
图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
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); } |