当前位置:首页 > 实用技巧 >

友元类所有函数(友元模板函数有几种)

来源:原点资讯(www.yd166.com)时间:2024-01-10 04:59:58作者:YD166手机阅读>>

友元类所有函数,友元模板函数有几种(1)

C 使用类对数据进行隐藏和封装,类的数据成员一般定义为私有成员,而将提供类与外界通讯接口的成员函数定义为公有的。

C 类成员的三种访问权限:

  • public:可以被该类中的函数、子类的函数、友元函数访问,也可以由该类的对象访问;
  • protected:可以被该类中的函数、子类的函数、友元函数访问,但不可以由该类的对象访问;
  • private:可以被该类中的函数、友元函数访问,但不可以由子类的函数、该类的对象、访问。

但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁访问类的私有(private)成员和保护(protected)成员,这时可以将这些函数定义为友元函数。

除了友元函数,还有友元类,两者统称为友元(friend)。

借助友元,可以使得普通函数或其他类中的成员函数可以访问某个类的私有成员和保护成员。

  • 友元函数:普通函数可以访问某个类私有成员或保护成员。
  • 友元类:类A中的成员函数可以访问类B中的私有或保护成员。
1、友元函数

友元函数时可以直接访问类的私有成员或保护成员,它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明。

友元函数的声明格式如下:

friend 类型 函数名(形参);

示例如下,友元函数 ShowAge() :

友元类所有函数,友元模板函数有几种(2)

如上图所示,类的友元函数 ShowAge() 定义在类的外部,需要注意的是,尽管 ShowAge() 在类的定义中出现过,但其并不是类的成员函数。

倘若没有在 Student 类中声明友元函数 ShowAge() ,则其是不能直接访问类的私有成员的,如下图所示。

友元类所有函数,友元模板函数有几种(3)

类的友元函数函数减少了类型检查和安全性检查,提高了程序的运行效率,但它破坏了类的封装性和隐藏性,使得非成员函数也可以访问类的私有成员。

2、友元类

友元可以是一个函数,也可以是一个类,该类被称为友元类。

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的保护成员和私有成员。

声明友元类的格式如下:

friend class 类名;

其中,friend 和 class 是关键字,类名必须是程序中已经定义过的一个类。

示例如下,类CB是类CA的友元类,可以直接访问类CA的私有成员。

友元类所有函数,友元模板函数有几种(4)

倘若没有在类CA中声明友元类CB,则CB是不能直接访问CA的私有成员的。

友元类所有函数,友元模板函数有几种(5)

使用友元类时,需要注意:

  • 友元关系不能被继承;
  • 友元关系是单向的,不具有交换性。即类B是类A的友元,则类A不一定是类B的友元,需要看类中是否有相应的声明;
  • 友元关系不具有传递性。即类B是类A的友元,类C是类B的友元,但类C不一定是类A的友元,需要看类中是否有相应的声明。

另外,使用一般不建议把整个类声明为友元类,而只将某些成员函数声明为友元函数,这样更安全些。

3、友元的优缺点

利用 friend 修饰符,可以让一些普通函数 或 另一个类的成员函数 直接对某个类的保护成员和私有成员进行操作,提高了程序的运行效率;同时避免把类的成员都声明为public,最大限度地保护数据成员的安全。

但是,即使是最大限度地保护数据成员,友元也破坏了类的封装性。

如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上开了一个门。所以使用友元时一定要慎重。

友元类所有函数,友元模板函数有几种(6)

,

栏目热文

清明上河图保存在哪个地方(清明上河图保存在哪些地方)

清明上河图保存在哪个地方(清明上河图保存在哪些地方)

明代画家仇英仿造的《清明上河图》被卖出了9位数的天价,一件后世仿品居然能卖的这么贵,那么真品的价格肯定会更高。北宋绘画师...

2024-01-10 05:11:47查看全文 >>

刷墙怎么省事(刷墙怎么干得快)

刷墙怎么省事(刷墙怎么干得快)

墙面刷新喷涂工艺由于乳胶漆施工起来较为简单方便,有的业主又想节省一些装修费用,于是便打算自己来动手刷墙。在家装中,刷墙是...

2024-01-10 04:44:20查看全文 >>

刷墙工具小妙招(自己动手刷墙需要哪些工具)

刷墙工具小妙招(自己动手刷墙需要哪些工具)

1刷墙需要准备哪些工具?9寸滚筒:用于大面积刷墙4寸滚简:用于刷边缘4寸羊毛刷:用于刷边边角角塑料桶:盛装乳胶漆、防止浪...

2024-01-10 04:40:12查看全文 >>

刷墙怎么刷直线(刷墙最简单教程)

刷墙怎么刷直线(刷墙最简单教程)

人还是穷点好,不穷你都不知道自己有多聪明!为什么我会这么说呢?直接给大家看一下朋友新房的装修,很多前来参观的人非说墙上贴...

2024-01-10 04:48:13查看全文 >>

刷墙神器的小妙招(刷墙最简单方法)

刷墙神器的小妙招(刷墙最简单方法)

现在房子越建越多,自然少不了装修了,刷墙在装修中是很重要的一个环节,传统的方式刷墙不仅效率很低,而且还很费力。有一位建筑...

2024-01-10 04:40:47查看全文 >>

友元函数放在哪里(怎么理解友元函数)

友元函数放在哪里(怎么理解友元函数)

什么是友元C 规定私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)...

2024-01-10 05:03:53查看全文 >>

友元函数模板图(函数模板友元函数)

友元函数模板图(函数模板友元函数)

在C 中,可以使用模板来创建泛型代码,以处理不同类型的数据。友元声明是一种特殊的声明,它允许在类定义中访问私有成员。当...

2024-01-10 05:18:51查看全文 >>

友元函数可以调用静态成员吗(友元函数访问私有成员)

友元函数可以调用静态成员吗(友元函数访问私有成员)

C 是一门非常强大和灵活的面向对象编程语言,它提供了类和对象的概念,让程序员可以根据不同的场景设计和实现自定义的数据类...

2024-01-10 04:34:12查看全文 >>

友元函数怎么转换成员(友元函数怎么调用成员函数)

友元函数怎么转换成员(友元函数怎么调用成员函数)

什么是友元C 面向对象的特点是数据封装和数据隐藏。然而,某些类外部函数可能要使用类内部成员变量,这就需要将成员变量设置...

2024-01-10 04:30:49查看全文 >>

友元函数能访问成员吗(友元函数访问私有成员)

友元函数能访问成员吗(友元函数访问私有成员)

友元函数我们知道在c 中类具有封装、继承、多态、数据私有化的特性,一般的类外函数无法直接对类的数据进行操作,如果想让类...

2024-01-10 05:12:19查看全文 >>

文档排行