C++温故补缺(六):友元函数、内联函数和this指针
友元函数、内联函数和this指针
友元函数
友元函数是定义在类的外部,但有权访问类的所有私有(private)和保护(protectd)成员.友元函数的原型在类的定义中出现,但它并不是类的成员函数
友元不止可以是函数,还可以是类,称为友元类
声明友元函数/类,用friend关键字
如:
#include<iostream>
using namespace std;
class box{
private:
int lenght;
int width;
int height;
public:
friend void getter(box b);
box(int l,int w,int h):lenght(l),width(w),height(h){};
};
void getter(box b){
cout<<"length:"<<b.lenght<<endl;
cout<<"width:"<<b.width<<endl;
cout<<"height:"<<b.height;
}
int main(){
box b1(2,3,5);
getter(b1);
}
友元函数没有this指针,参数主要有三种情况:
-
非static成员,用对象做参数
-
访问static成员或全局变量时,不需要对象做参数
-
如果要访问的对象是一个全局对象,也不需要参数
友元函数的调用同普通函数,不需要通过类或对象
内联函数
inline void fun(){
cout<<"hello";
}
int main(){
fun();
}
内联函数使用关键字inline来声明,它和普通函数的区别是:
普通函数在运行时被调用,内联函数在编译时嵌入
也是空间换时间,增加了父作用域的空间使用,缩短了运行时的花销
使用内联函数的原则:
-
内联函数一般都是小于10行的小函数
-
不允许使用循环,递归和开关语句
类中声明的函数,定义在类外,实际也是内联函数,只是省略了inline说明符
this指针
this指针是指向对象本身的指针,在所有的成员函数的参数都隐含了this指针,可以通过this指针调用所有的成员
class box{
private:
...
public:
void print(this);
};
-
类似python的self参数
-
友元函数没有this指针,因为它不是类的成员函数
-
this是一个const指针,不允许修改
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/cppreview6.html