您的位置:首页 > 编程语言 > C语言/C++

C++友元

2014-02-22 13:29 274 查看
友元成员函数

class Car
{
	friend void Key::set_Sound(Car &c, int s);
	...
};


这样在Key::set_Sound()中可以访问Car的私有成员(编译器在处理friend这条语句时,应先看到Key类的声明和set_Sound()方法的声明)。

在声明时要注意循环依赖(若class Key在class Car前声明,Key的成员函数的参数中有Car,若Car在Key前声明,则Car中有friend函数),解决方法是使用前向声明——

class Car; //前向声明
class Key {...}; //注:这里只是成员函数的声明,因为如果定义函数中用到了Car的成员函数,那么在class Key之前应该有Car中函数的声明,而Car的声明在Key之后
class Car {...};//可声明,可定义
//这里定义Key的成员函数




如果想让Key的成员函数成为内联函数,则可以用inline关键字——

内联关键字inline要与函数定义在一起(这体现了高质量C++编程风格的一个基本原则——声明和定义不可混为一谈——因为用户没必要知道函数是否内联),内联函数inline void Key::set_Sound(Car &c, int s) {...}对编译器是可见的(这样能在调用点展开函数)。在类声明中定义的成员函数将自动成为内联函数,这虽然方便,但不是一种良好的编程风格。

class A 
{	
public:
	void B();
};
inline void A::B() {...}


内联函数的机制是在函数C中调用了class A中的函数B,不是像外联函数那样跳转到B的函数体,执行完后再返回到C中,而是在C中展开B的运行代码,优势是节省了调用开销,提高了运行速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: