,或受保护的和非虚拟的 Should destruction behave virtually?...否则,应该对其进行保护,以便只有派生类才能在自己的析构函数中调用它,这个析构函数也应该是非虚的,因为它不需要虚拟地运行。...如第39项所述,对于普通成员函数,选择之间是允许以非虚拟方式(通过指向Base的指针)调用它(但如果它调用虚拟函数(例如在NVI或模板方法模式中),则可能具有虚拟行为) ),实际上还是根本没有。...然后,即使析构函数必须是公共的,也可能会面临很大的,不将其虚函数化的压力,因为作为第一个虚拟函数,当永远不需要添加的功能时,它将招致所有运行时类型的开销。...更好的设计是遵循该产品的建议,为其提供受保护的非虚析构函数。
4.1 友元涉及的基本概念 友元函数:友元函数可以访问类的私有和受保护成员,但它并不是类的成员函数。...友元类:某个类的所有成员函数都可以是另一个类的友元,允许访问该类的私有和受保护成员。...虽然 func 是一个独立于类的外部函数,但通过友元声明,它获得了访问类的私有数据的权限。 4.3 友元类 友元类允许一个类的所有成员函数访问另一个类的私有和受保护成员。...友元类的成员函数并不需要逐一声明为友元,只要类被声明为友元,所有的成员函数都能访问另一个类的私有和受保护成员。...5.5 内部类的友元关系 内部类默认是外部类的友元类,这意味着内部类可以访问外部类的私有和受保护成员。
友元可以是友元函数或友元类,而这种友元关系是在类定义中通过关键字 friend 显式声明的。 4.1 友元的基本概念 友元函数:友元函数可以访问类的私有和受保护成员,但它并不是类的成员函数。...友元类:某个类的所有成员函数都可以是另一个类的友元,允许访问该类的私有和受保护成员。...虽然 func 是一个独立于类的外部函数,但通过友元声明,它获得了访问类的私有数据的权限。 4.3 友元类 友元类允许一个类的所有成员函数访问另一个类的私有和受保护成员。...友元类的成员函数并不需要逐一声明为友元,只要类被声明为友元,所有的成员函数都能访问另一个类的私有和受保护成员。...5.5 内部类的友元关系 内部类默认是外部类的友元类,这意味着内部类可以访问外部类的私有和受保护成员。
和 受保护成员 ; B 是 A 的好朋友 , B 可以访问 A 的所有成员 ; 2、友元类声明 声明一个 类 B 是 另一个类 A 的 友元类 , 可以 在类 A 中使用 friend 关键字来声明 ;...B 是 A 的 友元类 ; B 类中定义 A 类型成员变量 ; B 可以访问 A 中的 所有成员 , 包括 私有成员 或 受保护成员 ; B 可以看做 A 的 数据操作辅助类 ; 代码示例 : class...friend class StudentCaculate; } 3、友元类单向性 友元类单向性 : 友元类关系是单向的 , 声明一个类 B 是 另一个类 A 的 友元类 , B 可以访问 A 的 所有成员..., 但是 A 不是 B 的友元类 , A 不能访问 B 的私有和保护成员 ; 4、友元类继承性 友元类 关系不具有继承性 , 即 子类不能直接继承父类的友元类 ; 5、友元类作用 友元类主要作用 :...作为 某个类的 数据操作 辅助类 ; 作为 多个类 之间 传递信息 的 辅助类 ; 二、友元类和友元函数由来 1、友元类和友元函数引入 友元类 和 友元函数 会破坏 C++ 面向对象 的封装性 , 那么为什么还会出现该机制呢
继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员* 六. 继承与静态成员 基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。...而组合则是一个类将另一个类作为自己的成员变量使用 使用场景方面: (2)继承适用于以下情况: 当两个类具有明显的“is-a”关系时,即一个类是另一个类的具体化或特例时,使用继承。...例如,如果有一个“动物”类,而“狗”是动物的一种,那么狗类应该继承自动物类。 当一个类需要使用另一个类的所有方法或属性时,继承也是一个好的选择。...例如,如果一个类需要使用另一个类中的大量属性和方法,通过继承可以很方便地获取这些功能。 (3)组合适用于以下情况: 当两个类之间存在“has-a”关系时,即一个类作为另一个类的组件时,使用组合。...组合可以让一个类作为另一个类的组件,而不必暴露其全部接口,从而保持了较高的封装性。
友元 友元提供了一种特殊的机制,可以让一个类允许另一个类或函数访问其私有或受保护的成员。虽然友元增加了便利性,但也会破坏封装性,增加代码耦合度,因此使用时需谨慎。...3.1 友元函数 问题描述:在重载 operator作为输出流对象和 this 指针会竞争第一个参数的位置。...但全局函数不能直接访问类的私有成员,这时就需要友元函数来解决这个问题。 友元函数的特点: 可以访问类的私有和保护成员,但不属于类的成员函数。 不能用 const 修饰。...3.2 友元类 友元类是一种类的所有成员函数都可以访问另一个类的私有和保护成员的机制。 特点: 友元关系是单向的,不具有交换性。...3.3总结: 友元函数和友元类允许访问私有和保护成员,但要谨慎使用,因为这会增加代码的耦合性。 友元关系是单向的,不可传递。 使用友元可以解决一些特殊情况下的访问权限问题,如重载运算符等。 4.
(四)友元 友元在 C++ 编程中提供了一种突破类的封装机制,允许非成员函数或其他类访问类的私有和保护成员。友元包括友元函数和友元类,友元函数和友元类可以访问类的私有和保护成员。...友元函数 定义与作用 友元函数是一种特殊的非成员函数,可以通过友元函数访问类的私有和保护成员 在类内使用friend关键字声明友元函数 特点 友元函数只是声明,所以可以在类的定义的任何地方声明,不受类的访问限定符的限制..._b1 << endl; } int main() { A aa; B bb; func(aa, bb); return 0; } 友元类 定义与作用 友元类是一个类的所有成员函数都可以访问另一个类的私有和保护成员...在一个类内部用 friend class 声明另一个类为友元类。 特点 友元类的关系是单向的,不具有交换性。例如,A 类是 B 类的友元,但是 B 类不是 A 类的友元。 友元类的关系不能传递。...内部类是⼀个独⽴的类,只是受外部类类域限制和访问限定符限制,所以外部类在定义对象的时候,其中不包括内部类。 内部类默认是外部类的友元类,可以使用外部类的成员。
计算外部类对象的大小就不会将内部类的成员包括在内 简单来说内部类与外部类的关系就是:(划重点) 内部类是外部类的友元类,但外部类不是内部类的友元类,并且内部类受到外部类类域限制和访问限定符限制。...内部类与外部类的相互作用 1.内部类访问外部类的成员: 简单来说:内部类默认是外部类的友元类 内部类可以定义在外部类的public、protected、private中都是可以的。...假如内部类受外部类公有限定符限制,需要通过外部类限定符限定的方式创建内部类对象 假如内部类是受外部私有或保护限定符限制,那么在类外无法创建内部类的对象(如果你不想外部可以创建内部类的对象,就可以这么做)...其他地方都用不了 实现辅助类:内部类可以作为外围类的辅助类,用于实现一些具体的功能,而不影响外围类的整体结构。...避免命名冲突:通过内部类,可以避免不同命名空间或类中的命名冲突。 访问权限控制:内部类可以更好地控制对特定成员或方法的访问权限。
第一章:继承与友元、静态成员 1.1 继承与友元 在 C++ 中,友元是一种特殊机制,它允许指定的非成员函数或者其他类访问类的私有成员和保护成员。...然而,友元关系不能继承,也就是说,基类的友元不会自动成为派生类的友元,反之亦然。...1.1.1 友元函数的定义 如果基类定义了一个友元函数,该友元函数只能访问基类的私有和保护成员,而不能访问派生类的私有或保护成员。...反之,如果友元函数在派生类中定义,它也无法访问基类的私有和保护成员。...类中的_studentID return 0; } 在以上代码中,Display 函数是 Person 类的友元,它可以访问 Person 的保护成员 _name。
---- 友元 我们已知道类具备封装和信息隐藏的特性。...友元是一种定义在类外部的普通函数,但他需要在类体内进行说明,为了和该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是他能够访问类中的私有成员。...友元的作用在于提高程式的运行效率,但是,他破坏了类的封装性和隐藏性,使得非成员函数能够访问类的私有成员 友元能够是个函数,该函数被称为友元函数;友元也能够是个类,该类被称为友元类 友元函数 友元函数的特点是能够访问类中的私有成员的非成员函数...友元函数从语法上看,他和普通函数相同,即在定义上和调用上和普通函数相同 友元类 友元除了前面讲过的函数以外,友元还能够是类,即一个类能够作另一个类的友元。...当一个类作为另一个类的友元时,这就意味着这个类的任何成员函数都是另一个类的友元函数 Tip: 引自 C++中友元详解 ---- 代码示例 要求 用友元函数实现clock类的前置、后置单目运算符重载
上一篇文章:C++进阶:继承 ❤️继承 继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员 class Student; class Person { public: friend..._stuNum << endl; } 例如上面这串代码,注释掉的那部分 就是错的,因为基类的友元函数无法访问到派生类保护或者私有成员。...变量改成静态成员变量之后 ,改变一个类的内容,另一个也会跟着改变,从中可以看出其实静态 成员变量只有一份,而且两个类中的静态成员变量是相同的。...单继承:一个子类继承一个父类的属性和方法 多继承:一个子类可以继承多个父类的属性和方法 什么是菱形继承呢? 类似于下图的关系就是菱形继承,菱形继承有什么特点呢?...菱形继承问题发生在一个类通过多个路径继承同一个基类,从而导致重复继承基类的成员。 虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如上面的继承关系,在B和C的继承A时使用虚拟继承,即可解决问题。
继承与友元、静态成员 6.1 继承与友元 在 C++ 中,友元是一种特殊机制,它允许指定的非成员函数或者其他类访问类的私有成员和保护成员。...然而,友元关系不能继承,也就是说,基类友元不能访问子类私有和保护成员,反之亦然。...6.1.1 友元函数定义 如果基类定义了一个友元函数,该友元函数只能访问基类的私有和保护成员,而不能访问派生类的私有或保护成员。...反之,如果友元函数在派生类中定义,它也无法访问基类的私有和保护成员。...因此,A 的构造函数先于 B 和 C 被调用。 show 方法:由于 D 重写了 show 方法,因此调用 d.show() 输出的是 D's show()。
友元包括:友元函数和友元类 1.1友元函数 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要在前面加friend关键字 之前我们在重载..._day; return in; } 说明: 友元函数可访问类的私有和保护成员,但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明,不受类访问限定符限制 一个函数可以是多个类的友元函数...友元函数的调用与普通函数的调用原理相同 1.2友元类 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。...友元关系不能传递。如果C是B的友元, B是A的友元,则不能说明C时A的友元。 友元关系不能继承,在继承位置再给大家详细介绍。..._a 的私有变量 } private: int _b; }; private: int _a; }; 其实B就是一个普通类,只是受A的类域和访问限定符限制,
先调用父类的构造函数 //2.释放时先调用子类的析构函数 //子类没有 就使用父类的方法 //子类有实现,就是用子类的重写 //父类型的引用 赋值子类型的对象 方法都是父类型中的方法 void funExtends.../w3cnote/cpp-virtual-functions.html 友元 概念 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。...尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。采用friend 关键字 表示友元。...友元的两种表现形式 友元函数 友元类 实例 class Girl { public: //友元函数不能使用this friend void modify(Girl *girl, int...友元类.png ? 友元函数.png 模板 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
简述下C++语言的特点和对象的特点 C++特点: 面向对象 封装和数据隐藏:把相关的数据封装成一个“类”组件 继承和重写:是子类自动共享父类属性和方法,这是类之间的一种关系 多态:增强软件的灵活性和重用性...继承:继承允许一个类继承另一个类的属性和方法。 多态:多态允许不同类的对象对相同的消息(方法调用)作出不同的响应。...受保护成员(protected):子类可以访问父类的受保护成员变量和函数。 私有成员(private):子类不能访问父类的私有成员变量和函数。...构造函数和析构函数:如果基类的构造函数和析构函数是公有的,子类可以直接访问它们;如果基类的构造函数和析构函数是受保护或私有的,子类仍然可以访问它们,但只能在子类的构造函数和析构函数内部调用它们,不能在类外部使用...c++中A类访问B类中的私有成员的解决方法 使用友元函数或友元类:B类中声明A类为友元,或者在A类中声明B类为友元 提供公有成员函数或接口:如果希望B类的私有成员被A类间接访问,可以在B类中提供一些公有成员函数或接口
、private 访问限定符的限制 2.友元 友元(Friend)在C++中是一个重要的概念,它允许某些特定的外部函数或类访问另一个类的私有(private)或受保护(protected)成员 2.1...: _year(year) , _month(month) , _day(day) {} private: int _year; int _month; int _day; }; 特点: 友元函数可访问类的私有和保护成员...,但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明,不受类访问限定符限制 一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同 2.3友元类 友元类的所有成员函数都可以是另一个类的友元函数...C是B的友元, B是A的友元,则不能说明C时A的友元 友元关系不能继承 3.内部类 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。...外部类对内部类没有任何优越的访问权限 内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。
文章目录 前言 一、面向对象 二、使用类 1.类的基础使用 2.运算符重载 3.友元 1.友元函数 2.友元类 3.友元成员函数 三、类继承 基类 派生类 插个访问权限的事情 2.多态 ***公有 **...平常不用,但是有一种地方用了更好:公有类方法提供了唯一的访问途径,但是有时候不太适用于特定的问题,友元就出现了 1.友元函数 可以看为类的扩展接口,直接用吧: //创建友元函数是将其放入类声明中 class...不是成员函数,但是与成员函数的访问权限相同 函数主体也有些不同,不能用::作用域 a operator*(double m,const T &t) { //主体随意 } 2.友元类 友元类的所有成员函数都是另一个类的友元函数...,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。...当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。
只赋予友元代码(friend code)访问权限 另一个可以防止“暴露过度”的很有用的技术是:只给友元代码以访问特定功能的权限 (例如,实例化某个类或者调用某个方法)。...默认情况下,Java要求互为友元的类必须在同一个包中。...如果你想把某个功能共享给同一个包中的其他类,马么你可以给构造器,字段或者方法加上package-private修饰符,这样的话,只有友元可以进行访问。...但是有的时候,更有用的方法是将友元集合扩展到更广的类范围中 —— 比如,有人把API的纯定义放在一个包中,而其实现放在另一个包中。这种情况下,下面的方法非常有用。...,但是已经可以防止友元(这些友元类不仅仅只在 api 包中)之外的类对其进行实例化或者监听事件了。
• 外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。 • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。 • ⼀个函数可以是多个类的友元函数。...• 友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。 • 友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。...友元函数(Friend Function) 友元函数是一个不是类成员的函数,但它可以访问该类的所有私有成员和保护成员。要定义友元函数,可以在类定义中使用 friend 关键字声明。...尽管 x 是私有成员,但友元函数可以访问它。 2. 友元类(Friend Class) 友元类允许一个类访问另一个类的所有私有和保护成员。...总结: 友元函数:允许非成员函数访问类的私有成员。 友元类:允许另一个类访问当前类的所有成员。 友元成员函数:允许特定的成员函数访问类的私有成员。
领取专属 10元无门槛券
手把手带您无忧上云