C++友元

来源:互联网 发布:淘宝代运营的公司销售 编辑:程序博客网 时间:2024/05/17 09:06

友元成员函数

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

1 0