类外定义

-----------------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】

原文地址:https://www.cnblogs.com/siwuxie095/p/6719486.html