您的位置:首页 > 其它

类声明和成员函数定义的分离

2018-04-02 22:03 302 查看
 当一个类被多个程序使用时,一般将类的声明(包含成员函数的声明)放在指定的头文件中,用户编程时,只需将这个头文件包含进来,而不必在每个使用该类的程序中重复书写其声明。为了实现信息隐蔽(即封装后,用户只能看到函数的声明,知道如何去使用它,而不知道函数具体是如何实现的),对类的成员函数的定义一般不放在头文件中而放在另一个源代码文件中。下面我们以一个小例子来理解一下[cpp] view plain copy//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);  
};  

[cpp] view plain copy/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;  
}  

[cpp] view plain copy//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;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: