一、友元类简介 1、友元类引入 在 C++ 语言中 , " 友元类 " 是 一个类 与 另外一个类 的 特殊类关系累 , 在 类 A 的 " 友元类 " B 中 , 可以直接访问 A 类 的 私有成员...和 受保护成员 ; B 是 A 的好朋友 , B 可以访问 A 的所有成员 ; 2、友元类声明 声明一个 类 B 是 另一个类 A 的 友元类 , 可以 在类 A 中使用 friend 关键字来声明 ;...Student { private: // 声明 StudentCaculate 类是 Student 类的友元类 // 在 StudentCaculate 类中可以访问 Student 类中的私有成员...friend class StudentCaculate; } 3、友元类单向性 友元类单向性 : 友元类关系是单向的 , 声明一个类 B 是 另一个类 A 的 友元类 , B 可以访问 A 的 所有成员..., 该操作难度很大 ; 三、友元类代码示例 ---- 在 Student 类中 , 定义了友元类 StudentCaculate , // 声明 StudentCaculate 类是 Student
; 二、友元函数声明 1、友元函数语法 " 友元函数 " 需要在 类 中进行声明 , 使用 friend 关键字修饰函数 , 语法如下 : class ClassName { // 成员变量和成员函数...友元函数 的 函数名 ; arguments : 是 友元函数 的 参数列表 ; 2、友元函数声明不受访问控制限制 " 友元函数 " 的 声明 , 不受类的访问控制限制 , 可以在任何地方定义 , 如...; private: // 声明友元函数 friend void changeAge(Student* s, int age); 4、友元函数示例 在 类中声明 如下友元函数 : private...: // 声明友元函数 friend void changeAge(Student* s, int age); 即使使用了 private 限定友元函数 , 在类的外部也能访问该函数 ; 在类的外部定义上述友元函数...- 友元函数 ---- 在下面的代码示例中 , Student 类有一个私有成员变量 age , 并且声明了一个友元函数 changeAge ; private: // 声明友元函数 friend
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。 友元函数的调用与一般函数的调用方式和原理一致。...当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。...例如如果Screen 类必须把Window 类的成员函数声明为友元,而Window类必须把Screen 类的成员函数声明为友元。该怎么办呢?...在这种情况下可以把整个Window类声明为Screen 类的友元。...若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。 (3) 友元关系不具有传递性。
友元类所有的方法都可以访问原始类的私有成员和保护成员 声明 friend class ClassName 友元声明可以位于公有、私有或保护部分,其所在的位置无关紧要。..._r.volup(_t,2); _r.ShowTv(_t); cin.get(); } 上边的例子中代码真正访问Tv成员的是Remote方法是volup,其它的方法不是真需要作为友元的...因此它是唯一需要作为友元的方法 确实可以选择仅让特定的类成员成为另一个类的友元,需不必须让整个类成为友元,但这样稍微有点麻烦,必须小心排列各种声明和定义的顺序。...让Remote::volup()成为Tv类的友元的方法,在Tv类声明中将其声明为友元 class { friend void Remote::set_chan(Tv & t,int c); }; ...这种问题的解决方法是,使用Remote声明中只包含方法声明,并将实际的定义放在Tv类之后。
在 C++ 中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。...现在,我们来介绍一种例外情况——友元(friend)。 借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。...在 C++ 中,这种友好关系可以用 friend 关键字指明,中文多译为“友元”,借助友元可以访问与其有好友关系的类中的私有成员。...如果你对“友元”这个名词不习惯,可以按原文 friend 理解为朋友。 友元函数 在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。...友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。 友元函数可以访问当前类中的所有成员,包括 public、protected、private 属性的。
友元 1.知识点介绍 类的特性之一就是封装,而友元就是C++为用户提供打破这种封装的手段,友元分为友元函数和友元对象 2.友元函数 1、友元函数,他只是一个函数,友元函数不是类的成员,通过类对象是无法访问的...2、友元函数,无论声明在类中的任访问属性下都可以,不影响他的调用和访问 !!!...fun(); // 私有函数成员 friend void FFun(CA& a); // 类外定义友元函数 friend void FFun1(CA& a) // 类中定义友元函数 {...友元类是一个单独的类,只不过和友元函数一样,在类中声明了一个友元类,在这个友元类中同样也 可以访问该类中的所有成员,在A类中声明B类为A类的友元类,那么在B类中就可以访问A类中的所有成员 // 示例...单方向: A是B的朋友, A可以访问B的数据, B不可以访问A的数据 不传递: A是B的朋友, B是C的朋友, 但A和C没有关系 不继承: A是B的朋友, C是B的儿子, A和C没有关系
友元函数是一个可以访问类的私有成员的函数,并且它不属于这个类。 友元类则是可以访问另一个类的私有成员的类。...声明友元函数/友元类,则需要这样做: 比如,我们需要生命ClassTwo是ClassOne的友元类,那么我们要在ClassOne中加入这么一行语句: friend class ClassTwo; 相应的...这就是说,如果函数B要成为类A的友元函数,那么必须在A中声明B是友元函数。 并且,朋友关系不具有对称性。假设有两个类A、B,B是A的友元类,但是并不意味着A是B的友元类。...(除非在B中声明A是它的友元类) 朋友关系不具有传递性。B是A的友元类,C是B的友元类,那么并不意味着C一定是A的友元类。...counter, 8); cout << "counter.x after call to setX friend function: "; counter.print(); } 需要注意的是,我们一般将友元函数的声明放在类的所有修饰符的前端
一、友元(friend) 概念:通过友元,打破了类的封装性,可以访问类内的所有成员 分类:友元函数、友元类 二、友元函数 概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系...友元函数可访问类内所有成员,但类不可以访问友元函数内部数据 格式 友元函数可以在类内声明时,需要加上关键字friend 友元函数可以在类外声明,类外定义。...友元类也不属于类成员,不拥有this指针 一个类A成为另一个类B的友元类时,类A就可以访问类B的所有成员 友元类的形式分为两种 使整个类成为友元 使类中的某一部分函数成为友元 使整个类成为友元 class...四、友元特点 单方向性:即友元可访问类,但是类不能访问友元 不传递性:A是B的友元,C是A的友元,但C不是B的友元 不继承:在上面的友元类中有介绍 ?...五、友元的声明和作用域的关系 使用一个友元时,要考虑到其友元的声明和作用域的问题,请看下面代码 class X { public: friend void f(){} //友元函数在类内定义 X()
友元类 友元函数用于类的扩展接口中,类并非只能拥有友元函数,也可以将类作为友元,该类称为友元类。...友元类的所有方法都可以访问原始类的私有成员和保护成员,但也可以对其做更严格的限制,使得特定的成员函数成为另一个类的友元。...友元类和继承、包含的关系 我们为什么要提供友元类的这种接口呢,它既然可以从外部访问类的私有部分的权限,是不是与我们面向对象的编程思想相悖呢?...嵌套类 c++允许将类的声明放在另外一个类中,在另外一个类中声明的类被称为嵌套类。对类进行嵌套的主要目的是为了帮助实现另外一个类,并避免名称冲突。...类声明的位置决定了类的作用域和可见性。类可见后,访问控制规则(公有、私有、保护、友元)决定程序对嵌套类成员的访问权限。
,在静态函数里面,不可以直接访问非静态成员。...友元函数友元类 所谓友元函数,就是在类中,用friend关键字声明一个函数,这个函数的声明在类中,但不作为类的成员函数,虽然友元函数不属于成员函数,却可以访问类中的成员,不论成员是public,pirvate...对于友元函数,放在public和private,或者是protected,都是可以的。...因为是需要友元来共享数据,那么大多数情况,友元函数都是有参数的, 因为友元函数没有this指针,则参数要有三种情况: 要访问非static成员时,需要对象做参数; 要访问static成员或全局变量时...,则不需要对象做参数 如果做参数的对象是全局对象,则不需要对象做参数 至于友元类,也是一样。
它可以访问全局对象;可以使用全局指针访问非全局对象;可以创建自己的对象;可以访问独立对象的模板类 的静态数据成员。 如果要为友元函数提供械板类参数,可以如下所示来进行友元声明。...count(); 非约束模板友元 友元的所有具体化都是类的每一个具体化的友元 上边说的约束模板友元函数是在类外面声明的模板的具体化。...通过在类内部声明模板,可以创建非约束友元函数,即每个函数具体化都是每个类具体化的友元。...共同的友元: 一个成员函数,它可以是一个类的成员,同时是另一个类的友元,但有时将函数作为两个类的友元更合理。...这两个类都有内部时钟,且希望它们能够同步,则该包含下 述代码行: class Analyzer;//前向声明 前向声明使编译器看到Probe类声明中的友元声明时,知道Analyzer是一种类型。
我们就把类B叫做类A的友元。...但是我们应该注意的是,我们把类B设置成了类A的友元类,但是这并不会是类A成为类B的友元。说白了就是:甲愿意把甲的秘密告诉乙,但是乙不见得愿意把乙自己的秘密告诉甲。...=======================友元类的声明方法和其用法======================= 声明友元类的方法其实很简单,只要我们在类A的成员列表中写下如下语句:...friend class B; 这样一来,类B就被声明成了类A的友元。...那么程序中就可以来调用TV类中的私有成员。下面,是该程序的输出: 好了,这就是友元类了。关于友元类,我反正是这样认为的,因为友元类有可能会破坏数据的安全性,我们还是少用为好啊!
在将一个类中的成员函数作为另一个类的友元函数的案例中我们看到,为了一个其他类的函数可以访问本类中的私有成员,将 distance 函数声明成了 friend 函数。...其实我们也完全可以将整个 ManagerPoint 类声明为 Point 类的友元类。...Point 的友元类 friend class ManagerPoint; private: int _x; int _y; }; int ManagerPoint::distance(Point...通过几篇文章的记载,我们一共见到了三种友元的方式。一种是全局友元函数、一种是某类的成员函数做友元函数,最后一种则是将整个类作为某类的友元类。...class A { public: // 全局友元函数 friend void func(A &a); // 类成员函数做友元函数 friend void B::func(A &a); // 完整的类做友元类
2.类友元 类友元(Friend Class): 可以将一个类声明为另一个类的友元。这样,在被声明为友元的类中,就可以直接访问另一个类的私有成员。...类友元关系在类之间共享数据或实现特定功能时很有用。 友元关系是单向的,不具有传递性。如果类A是类B的友元,类B不一定是类A的友元。...友元关系通常在类的声明部分使用 friend 关键字来声明。...) 可以将一个函数声明为一个类的友元函数。...这样,在友元函数中可以直接访问该类的私有成员。 友元函数可以是非成员函数,也可以是其他类的成员函数。 友元函数通常在类的声明部分或声明外部使用 friend 关键字来声明。
一、友元介绍 我们知道,类的成员函数可以访问同类的其他成员函数,包括公有、私有和保护成员。而类的外部函数只能访问类的公有成员。 友元是一种允许非类成员函数访问类的非公有成员的一种机制。...可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。...友元函数 友元类 二、友元函数 友元函数在类作用域外定义,但它需要在类体中进行说明 为了与该类的成员函数加以区别,定义的方式是在类中用关键字friend说明该函数,格式如下: friend ...3、某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。...,即A类向B类开放其Private/Protectd内容, 让B直接存取 友元类:一个类可以作另一个类的友元 友元类的所有成员函数都是另一个类的友元函数 友元类的声明: friend class 类名;
友元 生活中你的家有客厅(Public),有你的卧室(Private) 客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去 但是呢,你也可以允许你的好闺蜜好基友进去。...在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 ==friend== 友元的三种实现 全局函数做友元...类做友元 成员函数做友元 全局函数做友元 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容 friend void...test01() { Building b; goodGay(&b); } int main(){ test01(); system("pause"); return 0; } 类做友元...告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 可以设置类与类之间的访问权限 成员函数做友元 class Building; class goodGay
, 另一种是在友元函数中访问 ; 友元函数 , 在友元函数中 , 可以从类的外部访问类中的私有成员变量 , 友元函数声明方法 friend 返回值类型 方法名称 ( 参数列表 ) ; ; Student.h...中友元函数声明 //友元函数声明 , 可以在外部修改类中的私有成员变量 friend void changeAge(Student*); 友元函数实现 , 友元函数并不与类实现写在一起 , 而是在使用的位置进行实现...---- 友元类 , 友元类中所有的成员函数都是该类的友元函数 , 可以访问该类对象的私有成员变量 ; 友元类声明 , 声明友元类方法 friend class 友元类名称; , 友元类中所有的成员函数都是该类的友元函数...; Student.h 中友元类声明 //声明友元类 , 可以在友元类中访问修改类中的私有成员变量 //友元类中的所有的成员函数都是友元函数 friend class Teacher; 友元类定义与实现...中的友元类 , 该友元类中的所有函数都是 Student 对象的友元函数 class Teacher { public: //友元类中声明方法 , 修改 Student 中的 id 编号 void
基本相似,唯一的一点不同是父类定义的private成员,子类不可以访问,但是父类定义的protected成员,子类是可以访问的。...2.友元 如果想允许不属于当前类的一个函数存取当前类中的成员,那么要怎么才能做到呢,答案是友元。所谓友元,顾名思义是我们成为朋友了,关系已经比较亲近了,可以适当的参与对方的生活了。...友元关键字是friend,我们可以在一个类的内部声明一个友元函数、友元类,或者A类的成员函数也可以被声明为B类的友元。...//友元函数不属于类的成员,所以它不受其所在类的声明区域public,private,protected的影响 friend void g(A* a, int x); }; void g(A*...对于在类中被声明为友元的对象而言,不论是类的公有、私有还是保护成员,都是可以直接访问的。
Point 类中声明为友元函数。...void display() { cout << “(“ << _x << “,” << _y << “)” << endl; } // 将 ManagerPoint 中的 distance 函数声明为友元函数...void display() { cout << “(“ << _x << “,” << _y << “)” << endl; } // 将 ManagerPoint 中的 distance 函数声明为友元函数...void display() { cout << “(“ << _x << “,” << _y << “)” << endl; } // 将 ManagerPoint 中的 distance 函数声明为友元函数...,某一个类的成员函数作为另外一个类的友元函数的实现。
题目描述 定义一个时间类,包含私有属性:时、分、秒,要求加入属性的get方法,其他函数根据需要自己定义。...定义一个该类的友元函数,参数是两个时间对象的指针,要求计算两个时间对象的时间差,单位按秒计算,两个时间对象属于同一天,返回时间差的绝对值 例如1时2分3秒和4时5分6秒的时间差是3小时3分3秒,折算为秒共...45 输出样例1 1时2分3秒--4时5分6秒时间差为10983秒 1时1分1秒--1时1分1秒时间差为0秒 23时44分55秒--12时23分45秒时间差为40870秒 思路分析 首先你的时间类的类名不能叫做...是因为库函数里面也有一个time…… 返回时间差的绝对值,是以秒为单位,不妨在类定义里面增加一个成员函数,用来换算小时和分钟,计算出总秒数。...还要注意到我们需要定义一个友元函数,而且最高函数的参数是两个时间类指针,通过指针访问类对象的成员需要用->或者*().的方式。
领取专属 10元无门槛券
手把手带您无忧上云