类外定义是指在类的外部编写成员函数的函数体。C++的类外定义分为同文件类外定义和分文件类外定义。下面以一个定义类的例子说明什么是同文件类外定义和分文件类外定义。
定义一个Teacher类,具体要求如下:
数据成员:名字、年龄、性别;
成员函数:数据成员的封装函数、授课teach。
同文件类外定义
同文件类外定义顾名思义就是将函数体和函数声明写在一个文件里,文件名随意,内容如下:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class Teacher {
public:
void setName(string _name);
string getName();
void setGender(string _gender);
string getGender();
void setAge(int _age);
int getAge();
void teach();
private:
string m_strName;
string m_strGender;
int m_iAge;
};
void Teacher::setName(string _name) {
m_strName = _name;
}
string Teacher::getName() {
return m_strName;
}
void Teacher::setGender(string _gender) {
m_strGender = _gender;
}
string Teacher::getGender() {
return m_strGender;
}
void Teacher::setAge(int _age) {
m_iAge = _age;
}
int Teacher::getAge() {
return m_iAge;
}
void Teacher::teach() {
cout << "现在上课" << endl;
}
int main() {
Teacher t;
t.setName("孔子");
t.setGender("男");
t.setAge(30);
cout << t.getName() << endl;
cout << t.getGender() << endl;
cout << t.getAge() << endl;
t.teach();
system("pause");
return 0;
}
分文件类外定义
分文件类外定义是将函数声明写在后缀名为.h的头文件里,然后将函数体写到另一个文件里,并且要包含这个头文件。在开发中常用的是分文件类外定义的方式。具体做法如下:
新建头文件,文件名没有要求,但是最好和类名保持一致,这里命名为Teacher.h:
#include <iostream>
#include <string>
using namespace std;
class Teacher {
public:
void setName(string _name);
string getName();
void setGender(string _gender);
string getGender();
void setAge(int _age);
int getAge();
void teach();
private:
string m_strName;
string m_strGender;
int m_iAge;
};
新建源文件,文件名也没有要求,这里命名为demo.cpp:
#include "Teacher.h"
#include <iostream>
#include <string>
void Teacher::setName(string _name) {
m_strName = _name;
}
string Teacher::getName() {
return m_strName;
}
void Teacher::setGender(string _gender) {
m_strGender = _gender;
}
string Teacher::getGender() {
return m_strGender;
}
void Teacher::setAge(int _age) {
m_iAge = _age;
}
int Teacher::getAge() {
return m_iAge;
}
void Teacher::teach() {
cout << "现在上课" << endl;
}
int main() {
Teacher t;
t.setName("孔子");
t.setGender("男");
t.setAge(30);
cout << t.getName() << endl;
cout << t.getGender() << endl;
cout << t.getAge() << endl;
t.teach();
system("pause");
return 0;
}
当类外定义的函数有默认值时,只在类中给定默认值就可以,在编写函数体代码时不必再写默认值。比如下面的这个Student类:
class Student{
public:
void setName(string _name = "张三");
string getName();
private:
string m_strName;
};
然后在实现函数体时,就不必加上默认值了:
void Student::setName(string _name) {
m_strName = _name;
}
在main函数中调用该函数:
#include "Student.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
Student st;
st.setName();
cout << t.getName() << endl;
system("pause");
return 0;
}