当一个类被多个程序使用时,一般将类的声明(包含成员函数的声明)放在指定的头文件中,用户编程时,只需将这个头文件包含进来,而不必在每个使用该类的程序中重复书写其声明。
为了实现信息隐蔽(即封装后,用户只能看到函数的声明,知道如何去使用它,而不知道函数具体是如何实现的),对类的成员函数的定义一般不放在头文件中而放在另一个源代码文件中。
下面我们以一个小例子来理解一下
- //MarkBook.h
- /* 我们可以看到头文件中包含类的声明(包括成员变量及成员函数的声明),但没有成员函数的定义*/
- #include <string>
- using namespace std; //避免发生重命名的问题
- class MarkBook {
- private:
- string courseName;
- public:
- MarkBook(string name);
- void setCourseName(string name);
- string getCourseName();
- void showMessage(string courseName);
- };
- /MarkBook.cpp
- /*该源文件包含头文件中所定义的成员函数的定义(具体实现过程),将函数声明与函数实现分离*/
- #include "stdafx.h"
- #include "MarkBook.h"
- #include <string>
- #include <iostream>
- using namespace std;
- MarkBook::MarkBook(string name) {
- setCourseName(name);
- }
- void MarkBook::setCourseName(string name) {
- courseName=name;
- }
- string MarkBook::getCourseName() {
- return courseName;
- }
- void MarkBook::showMessage(string courseName) {
- cout<<courseName<<"--记分册"<<endl;
- }
- //main.cpp
- #include "stdafx.h"
- #include "MarkBook.h"
- #include <string>
- #include <iostream>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- MarkBook databaseMark("java");
- MarkBook softwareMark("C++");
- cout<<databaseMark.getCourseName()<<"\t"<<"--记分册"<<"\n"
- <<softwareMark.getCourseName()<<"\t"<<"--记分册"<<endl;
- return 0;
- }