# 成员函数的声明和定义:
class Human {public: void set(int) ; //声明 int PRint() { return weight; }private: int weight;};int main( ) { Human Tom,Mike; Tom.set ( 111 ) ; cout<<"Tom 's weight is:"<<Tom.print()<<"/n"; Mike.set(0); cout<<"Mike 's weight is:"<<Tom.print()<<"/n"; return 0;}void Human::set ( int w) { if ( w>0 || w<100 ) weight = w; else{ cout<<"The weight should be 0~100,otherwise we'll set it 0 /n"; weight = 0; }}为什么非要将成员函数的声明和定义分开?直接使用合并的成员函数岂不是更加间接和方便呢?
于是我们要了解 内联函数:
l 内联函数
引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数调用会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,
将函数的程序内容执行完后,再返回到转去执行该函数前的地方。
这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。
因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,
但又频繁地被调用的函数来讲,解决其效率问题更为重要。通俗地说:当我们定义了一个函数以后,
编译器就会在内存中为其创建一个指令集,当调用此函数时,程序就会跳转到该指令集处,
若是对函数执行上百次调用,那么就要来回跳转上百次,这会严重影响到程序的执行效率,
引入内联函数实际上就是为了解决这一问题。 在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。
显然,这种做法不会产生转去转回的问题,但是由于在编译时将函数休中的代码被替代到程序中,
因此会增加目标程序代码量,进而增加空间开销。
内联函数的定义方法
定义内联函数的方法很简单,只要在函数定义的头前加上关键字inline即可。
内联函数的定义方法与一般函数一样。
如:
inline int add_int (int x, int y, int z) {
return x+y+z;
}
编译器不会创建真正的函数,而只是将这个内联函数的所有代码复制到调用函数中,
这样程序在执行调用该函数时就不需要来回跳转,效率自然提高了,但是由于复制多次,
也导致了程序的体积增大,所以当在函数体很小时,适宜使用内联函数。
# 成员函数的声明和定义:
新闻热点
疑难解答