友元的一些资料

友元:可以访问私有权限下的一种代码

全局函数作友元:

我们创建了两个属性,并且通过无参构造函数给属性赋了值, 这个时候再创建一个goodgay类,形参是应用的buil1的对象,用这个引用的对象调用属性。所以下面在使用goodgay这个函数时候,传入的实参应该是创建出来的build对象。

目前来说只能调用public,如果想要调用私有下的属性那么我们需要使用友元,就是将调用私有属性的函数的声明放在class下面的头行,前面加一个friend关键字就可以了

这个代码还是挺简单的,是要思路对了就很好理解了,我们先创建一个Building的对象,给它属性以及无参构造函数,我们在下面书写goodgay函数,给它传入Building的对象(我们可以使用引用或者指针的方式),给它传入对象后我们就可以使用Building里面的属性通过我们传入的对象。

额外的一个知识,如何在将无参构造函数放到类外实现

下面这个是还在类内

下面是转换后的代码  ,它没有在();后面紧跟{}然后在中括号里面赋值,而是转移到全局函数里面,为了声明它的类是Build,所以在前面加了一个Build::

类作友元

当一个类中创建另一个类的对象有两张方式

1:当直接在栈上创建对象时(例如,Building build;),对象的内存分配和初始化是由编译器自动处理的,您不需要(也不能)在构造函数中手动分配内存。编译器会为build对象在栈上分配足够的内存,并调用Building类的构造函数(如果有的话)来初始化这块内存。如果Building类没有显式定义构造函数,编译器会生成一个默认构造函数来完成初始化工作。(一般情况下就是这种直接创建)(直接在栈上创建对象时,对象的内存分配和初始化是自动的)

2:使用new的方法创建对象,因为new出来的是一个地址,所以我们先创建一个build的指针,后面在默认构造函数里面new出来对象(

  • 当您使用new Building;时,您实际上是在堆(heap)上为Building类型的新对象分配了内存,并返回了一个指向该内存的指针。
  • 在这种情况下,您确实需要在某个地方(不一定是默认构造函数,但通常是类的构造函数或某个初始化函数中)来执行这个new操作,因为默认构造函数不会自动为您执行new
  • 您需要负责在适当的时候使用delete(析构函数来释放这块内存,以避免内存泄漏。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值