首页 > 其他分享 >友元声明

友元声明

时间:2023-06-11 11:11:23浏览次数:27  
标签:友元 name age Person fun 声明 void

  • 全局函数的友元声明的作用是影响访问权限,也就是该全局函数可以访问类内私有的成员属性,但是友元的声明起不到普通声明的作用,也就是定义出现在使用后面必须得另外声明,光靠友元声明是不行的。
 1 class Person
 2 {
 3     friend void fun();
 4 public:
 5     Person(string name, int age) :name_(name), age_(age)
 6     {
 7         fun();
 8     }
 9 private:
10     string name_;
11     int age_;
12 };
13 void fun()
14 {
15     cout << "Person类的友元" << endl;
16 }

 

 1 class Person
 2 {
 3     friend void fun();
 4     void fun();
 5 public:
 6     Person(string name, int age) :name_(name), age_(age)
 7     {
 8         fun();
 9     }
10 private:
11     string name_;
12     int age_;
13 };
14 void fun()
15 {
16     cout << "Person类的友元" << endl;
17 }

此时这个代码就不会报错。

  • 如果在类内声明了这个全局函数函数,那么类外如果想在定义之前使用这个全局函数的话,必须重新声明。
 1 class Person
 2 {
 3     friend void fun();
 4     void fun();
 5 public:
 6     Person(string name, int age) :name_(name), age_(age)
 7     {
 8         fun();
 9     }
10 private:
11     string name_;
12     int age_;
13 };
14 
15 void func()
16 {
17     fun();
18 }
19 void fun()
20 {
21     cout << "Person类的友元" << endl;
22 }

  • 包括在类内定义这个友元也有上述相同的规则
 1 class Person
 2 {
 3     friend void fun()
 4     {
 5         cout << "Person类的友元" << endl;
 6     }
 7     void fun();
 8 public:
 9     Person(string name, int age) :name_(name), age_(age)
10     {
11         fun();//这个程序是错的,如果友元在类内定义,成员函数不能使用该友元
12     }
13 private:
14     string name_;
15     int age_;
16 };
 1 class Person
 2 {
 3     friend void fun()
 4     {
 5         cout << "Person类的友元" << endl;
 6     }
 7     void fun();
 8 public:
 9     Person(string name, int age) :name_(name), age_(age)
10     {
11 12     }
13 private:
14     string name_;
15     int age_;
16 };
17 void fun();
18 void func()
19 {
20     fun();
21 }
22 
23 int main() {
24     func();
25     system("pause");
26     return 0;
27 }

从上述代码可以看出类内定义的友元函数是公有的,类外可以访问。

标签:友元,name,age,Person,fun,声明,void
From: https://www.cnblogs.com/Sandals-little/p/17472655.html

相关文章

  • C++ 友元函数
    类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友......
  • 声明式事务失效的七种情况
    1 不是spring容器管理的类2 方法a调用方法b,在方法b上声明事务3 public 写成了private4 不支持事务的数据模型(InnoDB支持)5 非RunTimeException(@Transactional(rollbackFor=Exception.class),可以解决Exception)6 自己处理了异常,没抛出来......
  • vscode 找不到模块“./App.vue”或其相应的类型声明。
    问题编辑器:VisualStudioCode项目类型:Vite+Vue+TS目标位置:main.ts项目运行:不受影响,正常运行,但是就是不爽解决在VisualStudioCode中安装TypeScriptVuePlugin(Volar)插件......
  • uobject只有可以声明无参构造函数和不写构造函数
    (一)结论:(二)测试过程:第一种:不声明任何构造函数:第二种:声明默认构造函数:第三种:声明其他构造函数:(直接报错,需要声明默认构造)(三)ue实现原理:UHT里可以解析出你是否定义了构造函数,是哪种构造函数:参数是否匹配“FObjectInitializer”:不同构造函数,对应使用不同的宏定义: 链接:ht......
  • let 和 const 是 JavaScript 中用于声明变量的关键字
    let和const是JavaScript中用于声明变量的关键字。let关键字用于声明可变(可重新赋值)的变量。通过使用let关键字声明的变量可以在其作用域内被重新赋值。例如:letx=10;x=20;//可以重新赋值const关键字用于声明不可变(不可重新赋值)的常量。通过使用con......
  • Forest轻量级框架的声明式使用
    1.Forest框架声明式接口的基础使用1.1构建接口​在Forest中,所有的HTTP请求信息都要绑定到某一个接口的方法上,不需要编写具体的代码去发送请求。请求发送方通过调用事先定义好HTTP请求信息的接口方法,自动去执行HTTP发送请求的过程,其具体发送请求信息就是该方法对......
  • SpringBoot中使用枚举类、switch、常量类(声明并初始化map)实现类策略者模式,接口返回
    场景SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130503707SpringBoot+@Validate+全局异常拦截实现自定义规则参数校验(校验get请求参数不能为空且在指定......
  • SpringBoot声明连接多个redis数据源配置模版
    在实际开发中,我们可能会用到2个不同的redis数据源;如何连接查询详情:文章目录一、依赖二、配置文件三、config类配置四、序列化问题五、封装工具类一、依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-dat......
  • C语言定义和声明
    1、定义:创建一个对象,为这个对象分配一块内存并给他去上一个名字,一个变量只能被定义一次。2、声明:告诉编译器,这个名字已经被匹配到一块内存上了,变量或对象是在别的地方定义的,声明可以出现很多次,声明是为了扩大变量的适用范围。......
  • Spring的原型Bean(Prototype)声明和注入方式
    目录一、了解单例和原型Bean1.1什么是单例Bean?什么是原型Bean?1.2如何去定义一个原型Bean二、注入原型Bean的方法2.1使用ApplicationContext的getBean每次进行获取2.2使用@Lookup注解三、使用场景四、参考一、了解单例和原型Bean1.1什么是单例Bean?什么是原型Bean?单例Bean,......