首页 > 编程语言 >C++温故补缺(六):友元函数、内联函数和this指针

C++温故补缺(六):友元函数、内联函数和this指针

时间:2023-03-20 23:24:12浏览次数:38  
标签:友元 box 函数 int 内联 温故 指针

友元函数、内联函数和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指针,不允许修改

标签:友元,box,函数,int,内联,温故,指针
From: https://www.cnblogs.com/Tenerome/p/cppreview6.html

相关文章

  • C++温故补缺(十五):多线程
    多线程参考:CSDN,知乎传统C++(C++11之前)中并没有引入线程的概念,如果想要在C++中实现多线程,需要借助操作系统平台提供的API,如Linux的<pthread.h>,或windows下的<windows.......
  • C++温故补缺(十四):信号处理
    信号处理信号是由操作系统传给进程的中断,能够提前终止一个程序。在Unix,Linux,MacOS或Windows系统上,都可以通过Ctrl+C产生中断。下面是可以在程序中被捕获的信号,并且可......
  • C++温故补缺(十三):模板
    C++模板模板是泛型的基础,泛型编程就是一种独立于任何特殊类型的方式编写代码。模板就是创建泛型类或泛型函数的蓝图。STL库中的几个数据结构(vector,list,map等)以及算法......
  • C++温故补缺(十二):动态内存
    C++动态内存同C,C++中也是有堆和栈的概念。栈是函数内部声明的所有变量都所占用空间,堆是程序中未使用的内存,在程序运行期间可用于动态分配。同样也有alloc()分配内存,新增......
  • C++温故补缺(十一):异常
    异常处理参考:cnblogs异常和错误(bug)异常:是程序开发过程中必须考虑的一些特殊情况,是程序运行时可以预料的执行分支。异常是不可以避免的,如0除问题,数组越界问题,文件不存在......
  • C++温故补缺(十):C++文件读写和流
    C++文件和流C++文件的读写流用的是fstream库,它定义了三个新的数据类型:数据类型描述ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。ifstr......
  • #yyds干货盘点#Vue3中的expose函数
    发现expose函数今天在看setupscript语法糖的时候发现有说到context上的​​expose​​​函数,然后就查了一下这个函数,发现是在setRef中被使用到,源码中在对ref的value赋值时......
  • 回调函数(强推)
    参考连接(应该是A小组调用,B小组开发):图解|彻底理解回调函数(qq.com)......
  • Oracle/Mysql/SqlServer 常用函数区别
    1.类型转换   --Oracle  select to_number('123') from dual;  --123;   select to_char(33) from dual;       --33;  select to_date('......
  • 使用Navicat创建存储函数时传递多个参数总是报错
      当我不传递参数时,它不报错;当我只传递一个参数时,它也不报错;可当我传递多个参数时,它就是会报错!!!人都麻了 后来发现传入的参数类型如果是字符串的话,Navicat并不会......