-----------------siwuxie095
类内定义与内联函数
内联函数使用关键字:inline 来定义,如:
内联函数与普通函数的区别:
内联函数省去了步骤② 和 步骤④,即 调用的部分 和 返回的部分,
省去两个步骤后效率更高、速度更快
但内联函数必须是结构和逻辑比较简单的代码,对于复杂的代码,
即使加上 inline 关键字,编译器也会拒绝将其按照内联的方式进行
编译
在定义一个类时,将成员函数的函数体写在类的内部,这种定义方式
称之为 类内定义,如:
类内定义与内联函数的关系:
类内定义的成员函数,编译器会将其优先编译为 内联函数,
它不会将 inline 写出来,但会以 inline 的方式进行优先编译
对于复杂的成员函数来说,无法编译成内联函数才编译成普通的函数
类外定义
所谓 类外定义,是指成员函数的函数体写在类的外部
具体来讲,类外定义又分为两种形式:
(1)同文件类外定义:
成员函数虽然定义在类的外面,但其定义与类的定义在同一个文件当中
如:
(2)分文件类外定义:
如果说 同文件类外定义 算是游击队的话,那么 分文件类外定义 则称得上正规军了
几乎所有的 C++ 项目,但凡是专业一点的程序员,都会将类的定义分文件来完成,
这样做有诸多的好处
分文件类外定义时注意头文件的包含(很关键),如果没有包含,则找不到相应的声明
如:
程序:
同文件类外定义:
//此为同文件类外定义 #include <stdlib.h> #include <iostream> #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("孔子"); t.setGender("男"); t.setAge(30); 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; } |
main.cpp:
#include <stdlib.h> #include "Teacher.h" #include <iostream> using namespace std;
/***********************************************************/ /*定义一个Teacher类,要求采用通文件类外定义和分文件类外定义 *的方式完成,具体要求如下: *数据成员: * 名字 * 年龄 * 性别 *成员函数: * 数据成员的封装函数 * 授课teach */ /***********************************************************/
int main(void) { Teacher t; t.setName("孔子"); t.setGender("男"); t.setAge(30); cout << t.getName() << " " << t.getGender() << " " << t.getAge() << endl; t.teach(); system("pause"); return 0; } |
【made by siwuxie095】