Fork me on Github Fork me on Gitee

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指针,不允许修改

posted @ 2023-03-20 23:18  Tenerome  阅读(71)  评论(0编辑  收藏  举报