类声明和成员函数定义的分离
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;
}
/* 我们可以看到头文件中包含类的声明(包括成员变量及成员函数的声明),但没有成员函数的定义*/
#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;
}
相关文章推荐
- C++中类的声明与其成员函数的定义分离--以提高类的复用性
- 类声明和成员函数定义的分离示例
- C++语言基础 例程 类声明和成员函数定义的分离
- [置顶] 类的封装性和信息隐蔽—类声明和成员函数定义的分离
- 类声明和成员函数定义分离
- 类声明和成员函数定义的分离
- 类的封装性和信息隐蔽——类声明和成员函数定义的分离
- 类声明和成员函数定义的分离
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 第一周阅读程序(1) 成员函数在类内声明,类外定义
- 几个基本概念:成员函数,函数声明,函数原型,函数定义
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()
- 类成员声明与定义前加inline的区别(C++ inline 函数)
- 为什么要将成员函数的声明和定义分开
- C++:如何声明和定义成员函数
- 模板类成员函数的定义和声明为什么要放在一个文件中
- c++ 在类体外定义的成员函数,函数体的左括号提示:error 应输入声明
- 关于模板类中模板成员函数在类定义外部特化报错,错为声明与定义不匹配
- C++模版函数声明和定义分离导致的错误