C++友元

友元成员函数

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的运行代码,优势是节省了调用开销,提高了运行速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值