为什么将成员函数的声明和定义分开,直接使用合并的成员函数岂不是更加简洁而又方便?如:
int print(){return weight;}
要说明这个问题,我们得先了解内联函数。
普通内联函数
当我们定义了一个函数,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数语句的下一行继续执行。假如对该函数执行了上百次调用,那么就要来回跳转上百次,这会严重影响到程序的执行效率。
C++中,为解决这一问题,可以使用关键字inline声明函数。如:
inline int func();
则编译器将不会创建真正的函数,而是将这个内联函数的所有代码复制到调用函数中,这样程序在执行调用该函数时就不需要来回跳转,自然就提高了程序运行时的效率。
使用内联函数在提高效率时,会需多用一些代码,比如说程序调用了内联函数100次,那么就要将该内联函数中的代码复制100次,这样会增大程序的体积。
假如函数很小,那么即使多次复制也不会增加许多体积,这时使用内联函数比较合适。如:
#include <iostream>
using namespace std;
inline int func(int);
int _tmain(int argc, _TCHAR* argv[])
{
}
int func(int x)
{
}
输出:
请输入一个数字
1
输入的数字为:1
---------------------------------------------------------
分析:
在程序的第3行声明了一个内联函数func,它有一个整形变量int,并且返回一个整数。
在第10行则调用了这个函数
cout<<"输入的数字为:"<<func(x)<<endl;
在编译该程序时就会自动将上面第1行语句替换为第2行,因此在执行该程序时就会节省了一次跳转。
注意:在不知道具体怎么操作时,最好先不要使用内联函数,等完成程序的大部分功能时,再对符合要求的函数进行内联操作。
我们也可以将成员函数说明为内联函数,如:
using namespace std;
class A
{
public:
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
}
void A::func(int x, int y){i=x;j=y;}//func定义部分
voidA::print(){cout<<"两数相乘为:"<<i*j<<endl;}//print定义部分
输出:
分析:
程序的第6-7行将类A的成员函数func和print声明为内联函数,第14-15行则调用了这两个函数。由于这两个函数是内联函数,因此在编译时,函数体中的代码都已分别写到了第14行和第15行。
我们也可以将成员函数的定义部分放到该类的声明中,也就是说将声明和定义合并在一起。
如:
voidfunc(int x,int y){i=x;j=y;}
这样该函数就会自动成为内联函数。我们用该方法对上面的程序进行修改如下:
#include<iostream>
using namespace std;
class A
{
public:
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
}
分析: