bosthhe1 / cpushpush

0 stars 0 forks source link

friend函数和内置类的认识 #10

Open bosthhe1 opened 1 year ago

bosthhe1 commented 1 year ago

首先我们要先明白,在自定义类的内部,只要是类的实体化,不管是函数还是传参的参数(不同的参数私有变量的值不同),都可以对私有变量进行直接访问,但是在函数外部就只能访问函数接口,就不能访问私有变量了 友元函数(类)相当于一个声明,特别注意友元函数里面就没有this指针了,因为友元函数是全局的,也不用指定作用域,用于其他函数或者类来调用该类的私有变量,就相当于声明我是你的朋友,我可以访问你的私有变量,友元函数是单向的,我声明了可以访问你,但是你不能访问我,所以友元函数是单向的,如果你也想访问我,就需要在我的类里面,加入你的友元函数,友元函数不可传递,a是b的友元,b是c的友元,a不能直接访问c,因为友元没有传递性 下图我们可以看到再TIME类型里面,可以直接访问DATE类里面的私有变量,需要注意是,要想访问,必须先有一个实例化,比如下方图片的,再TIME的私有类里面,存在一个DATE的实例化,通过实例化才能访问到私有变量,不能通过域来直接访问(目前所学的知识里面,能通过域来访问的,只有共有的static成员变量和static成员函数(静态成员变量)) image

bosthhe1 commented 1 year ago

友元其实并不太好,因为友元函数破坏了封装性,所以尽量少用友元函数

bosthhe1 commented 1 year ago

内部类意思就是再类的里面还存在一个类 内部类是外部类的友元,所以内部类可以直接访问外部类的私有成员变量,但是外部类不是内部类的友元,外部类无法访问内部类 内部类和全局类的基本相似,只是给内部类限制了一个类域,和static有点像,内部类的也不存在在外部类中,外部类只是限制作用,外部类的大小与内部类无关 image 类的大小为12 image 因为内部类和static不存在与私有成员变量