|
我们知道:类的公有成员能够在类外访问,私有的成员只能被类的其它成员函数访问。在C++中,可以定义友元,如果某一个函数定义为类的友元,则该函数就可以访问该类的私有成员,下面举例说明友元函数的使用。
假定我们已经定义了两个集合类变量,一个为整型数集合,另一个为实型数集合:
其实,我们也可以把一个类定义为另一个类的友元,例如: class A; class B { //... friend class A; }; 类A是类B的友元,类A中的所有成员函数都能访问类B的私有成员。 全局函数也可以作为类的友元。例如,假定我们将SetToReal定义为全局函数,并定义为IntSet和RealSet两个类的友元:
虽然友元为我们进行程序设计提供了一定的方便性,但是面向对象的程序设计要求类的接口与类的实现分开,对对象的访问通过其接口函数进行。如果直接访问对象的私有成员,就破坏了面向对象程序的信息隐藏和封装特性,虽然提供了一些方便,但有可能是得不偿失的,所以,我们要慎用友元。 C++的存取控制 C++有三个关键字,用于设置类成员的访问权限,它们是:public、private和protected。 ◇ public意味着在其后声明的所有成员在类外可以访问; ◇ private关键字则意味着,除了该类的成员函数之外,类外不能访问这些成员。如果试图访问私有成员,就会产生编译错误。类中缺省访问权限说明的的成员声明是private的; ◇ protected和private区别在于:protected成员可以被派生类访问,而private成员则不能被派生类访问。 友元的使用 类的私有成员只能在类内访问,那么有没有可能让类外的成员访问?其实,在C++中,友元可以访问类的私有成员。友元不是类的成员,但必须在类的内部声明。因为"谁是我的朋友"必须由"我自己决定"。绝对不能允许下面的现象发生:李四说,"嘿,我是张三的朋友",然后李四就开始使用张三的一切,包括它的私有财产。李四究竟是不是张三的朋友,必须由张三自己说了算。 通过friend关键字,可以把一个全局函数声明为友元,也可以把另一个类中的成员函数,甚至整个类都声明为友元,请看下面的例子:
解决的办法是:首先声明类X,但是这个类X的声明并不完整,能行吗?在本例中是可以的,这是由于Y::f(X*)的参数是指向X对象的指针,所以编译器允许在声明Y::f(X*)之前做一个不完全的类型指定。仅仅是告诉编译器,有一个叫X的类。这样,在类X中,Y::f(X*)就可以成功地声明为一个友元函数。 再来看看其它两个友元函数,第一个声明将一个全局函数g()作为一个友元,但g()在这之前并没有定义,这表明friend可以同时声明全局函数和友元。同样,friend可以同时声明类Z及类Z作为类Y的友元。 嵌套友元 对于嵌套类,也不能访问私有成员。嵌套类要访问私有成员也必须定义为友元。请看下面的例子:
friend holder : :pointer ; 关于友元的使用 | ||||||||||||||||||||||||||||||||||||||||||||||||
相关推荐
YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
本文记录的是改进YOLOv11的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑与之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-IoU提出了一种关注边界框本身形状和尺度的边界框回归方法。
友元类和友元函数
一、友元函数 友元函数和普通函数最大的区别在于友元函数可以直接访问类的私有成员和保护成员; 友元函数不属于类的成员函数,但是友元函数必须在类内部定义; 友元函数使用friend关键词声明; 友元函数能够实现类之间的数据共享,较少系统开销,提高效率,但是会破坏类的封装机制; class FriendFunc { public: FriendFunc(); ~FriendFunc(); friend void friend_function(FriendFunc f1); priva
16口交换机RTL8316 Cadence ALLEGROL设计硬件原理图PCB++PDF原理图+RTL8316技术手册.zip
16口交换机RTL8316Cadence orcad设计硬件原理图PCB+PDF原理图+RTL8316技术手册,可以做为你的设计参考。
c++友元
C++基础--友元我们知道:类的公有成员能够在类外访问,私有的成员只能被类的其它成员函数访问。在C++中,可以定义友元,如果某一个函数定义为类的友元,则该函数就可以访问该类的私有成员,下面举例说明友元函数的使用。假定我们已经定义了两个集合类变量,一个为整型数集合,另一个为实型数集合:程序段10-7class IntSet {pu
c++类——友元
如有兴趣了解更多请关注我的个人博客。
Qt程序编译是出现"field has incomplete type"问题的解决(转)
zh转自“http://blog.csdn.net/jobsss/article/details/7678646” 在编译程序是出现了如下错误,类或结构体的前向声明只能用来定义指针对象或引用,因为编译到这里时还没有发现定义,不知道该类或者结构的内部成员,没有办法具体的构造一个对象,所以会报错。将类成员改成指针就好了。 程序中使用incomplete type实现前置声明有助与实现数据的隐藏。...
C++——友元 & 内部类
1. 友元函数 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字 举例: class Date { friend ostream& operator<<(ostream& _cout, const Date& d); friend istream& operator>>(istream& _cin, Date& d); public: Dat.
CPP-基础:友元
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。 我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等...
【C++基础】友元
类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友。定义:类的特点是私有成员无法在作用域外访问,而友元函数是特权函数,允许访问私有成员。2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。//需要引用的类要在前面声明。
c++基础知识:友元
初识c++的友元
基础:C++的友元
C++的友元4.4.1 全局函数做友元4.4.2 类做友元4.4.3 成员函数做友元 在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 friend 友元的三种实现 全局函数做友元 类做友元 成员函数做友元 4.4.1 全局函数做友元 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容 friend void goodG
C++基础语法:友元
"打牢基础,万事不愁" .C++的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结.以 6th Edition(以下称"本书")的内容开展学习。
C++基础---友元
友元概念 友元函数 定义: friend(参数列表)#include using namespace std; //定义友元函数 class Rectangle { private: double length; double width; public: Rectangle(double l,double w):length(l),width(w
C++基础-友元详解
C++友元详解
C++基础(十三)友元
背景:在类中 私有成员变量无法被类外访问 1.全局函数做友元 实例代码如下: #include <iostream> using namespace std; class Person { //友元 friend void showDetial(Person* p); public: Person(): m_Age(10), m_Name(20) { } public: int m_Age; private: int m_Name; }; void showDe.
【C++基础】友元总结&&一些坑
编译器会在友元类的代码中直接访问被访问类的私有成员,同样无需经过访问权限检查。编译器在生成代码时会根据友元关系插入适当的权限访问代码,以确保友元函数或友元类可以访问私有成员。这样,尽管在类的定义中进行了访问控制,但通过友元关系,某些函数或类可以绕过这些访问限制来访问私有成员。总的来说,友元关系的底层实现是。
C++基础知识学习记录—友元
类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的数据成员,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。友元是一种定义在类外部的普通函数,但他。
C++基础知识:友元是什么,友元(全局函数做友元)
在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。通俗一点说就是友元,就好比你的闺蜜,你可以让他了解你身上的特有的东西。友元的目的就是让一个函数或者类 访问另一个类中私有成员。
35 C++基础-友元
1.友元 C++ 中可以使用 friend 关键字将函数、声明为某个类的友元 友元具有一些特权,可以访问 private 的成员 友元只能授予,不能索取,单向,不能传递 2. 友元函数 在类体重使用 friend 关键字进行声明 friend void fun(); // func 是非成员函数,不属于任何类 #ifndef TIME_H #define TIME_H cl...
c++_友元基础知识
友元,打破类的隐藏和封装,方便访问与修改,提高效率 1,友元函数:直接在函数前加friend,并且没有this->属性(非类成员函数) 函数与存放位置无关,直接调用,类似于使用类空间,直接只用函数名调用。 2,友元类:类前加上friend,没有交换性和传递性,不能互为友元, 数据传递: a>,其中静态变量常用于类与类的数据传递 b>,直接引用类,实现数据传递 3,友...
4515




被折叠的 条评论
为什么被折叠?



