类内定义与内联函数
像下面这种函数名与函数体都写在类里面的函数形式被称作类内定义,编译器编译的时候会把它默认成内联函数。
class Student { public: void setAge(int _age){age = _age;} int getAge(){return age;} void study(){} private: string name; int age; };
类外定义
成员函数的函数体写在类的外面,这样叫做类外定义。
类外定义分类:
同文件类外定义:函数的定义与函数体写在同一个文件里。
分文件类外定义:函数的定义与函数体写在不同的文件里。
类外定义方法:
函数类型 类名 :: 函数名
void Teacher::teach()
代码示例1:同文件类外定义
#include <iostream> #include <stdlib.h> #include <string> using namespace std; /************************************************************************* 定义一个Teacher类,要求分别采用同文件爱你类外定义和分文件类外定义 的方式完成,具体要求如下: 数据成员: 姓名 年龄 性别 成员函数: 数据成员的封装函数 授课teach *************************************************************************/ 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(void) { Teacher t; // 实例化对象 t.setName("cjj"); t.setGender("男"); t.setAge(22); cout<< t.getName()<< " " << t.getGender() << " " << t.getAge() << endl; t.teach(); system("pause"); return 0; }
代码示例2:分文件类外定义
把上面同文件类外定义的代码分别放到三个不同的文件里,在根据不同文件调用的函数、关键字,加上需要的头文件。
demo.cpp:
#include <iostream> #include <stdlib.h> #include <string> #include "Teacher.h" using namespace std; /************************************************************************* 定义一个Teacher类,要求分别采用同文件爱你类外定义和分文件类外定义 的方式完成,具体要求如下: 数据成员: 姓名 年龄 性别 成员函数: 数据成员的封装函数 授课teach *************************************************************************/ int main(void) { Teacher t; // 实例化对象 t.setName("cjj"); t.setGender("男"); t.setAge(22); cout<< t.getName()<< " " << t.getGender() << " " << t.getAge() << endl; t.teach(); system("pause"); return 0; }
Teacher.h:
#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; };
Teacher.cpp:
#include"Teacher.h" #include<iostream> using namespace std; // 类外定义,写出成员函数的函数体 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; }
两种类外定义的输出结果相同: