内置函数
在函数调用之前,要记下当时执行的指令地址,还要“保护现场”,以便在函数调用之后继续执行。在函数调用之后,流程返回到先前记下的地址处,并且根据记下的信息“恢复现场”,然后继续执行。这些都需要花费时间,如果有的函数频繁使用,用时间会很长,从而降低程序的执行效率。
C++提供一种高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,从而不是讲流程转出去。这种嵌入到主函数中的函数称为内置函数(内嵌函数)
指定内置函数的放大,只需在函数首行的左端加一个关键字 inline
inline int max(int a, int b,int c)
{
if(b > a) a = b;
if(c > a) c = a;
return a;
}
可以在声明函数和定义函数同时写inline,也可以只在函数声明时加inline,而定义函数不加inline。一般内置函数语句不超过5个,内置函数中不能包括复杂的控制语句,如循环语句和switch语句。
如果在类体重定义的成员函数中不包括循环等控制结构,C++系统自动地对他们作为内置函数处理。这是因为,在类内定义的成员函数,可以省略inline,这些成员函数被隐含的指定为内置函数。
友元
- 友元函数
如果在本类以外的其他地方定义了一个函数,在可以类体重用friend对其进行声明,此函数就称为本类的友元函数。友元函数可以访问这个类中的私有成员。
class Time
{
public:
friend void display(Time &);
.......
};
void display(Time&t)
{
cout<<t.hour<<":"<<t.minute<<endl;
}
在引用私有数据成员时,必须加上对象名。因为display函数不是Time类的成员函数,没有this指针,不能默认引用Time类的数据成员。
- 友元成员函数
friend函数不仅可以是一般函数(非成员函数),而且还可以是另一个类中的成员函数,这个类之前为定义,则需要该类提前引用申明。
class Date
{
public:
friend void Time::display(Date &);
};
.......
void Time::display(Date &d)
{
cout<<d.month<<"/"<<d.day<<endl;
cout<<hour<<":"<<minute<<endl;
}
- 友元类
将一个B类声明为A类的friend,B类就是A类的友元类,B类中的所有函数都是A类的友元函数,可以访问A类中的所有成员。友元的关系不能传递,即如果B类是A类的友元类,C类是B类的友元类,不等于C类是A类的友元类。
常成员函数
void Time::fun()const
{
......;
}
fun() 是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员。