论友元函数和友元类

今天闲来无事,温习了一下C++的友元函数和友元类。这里记录一下心得,加深一下自己的印象。

首先我们得了解一下什么叫友元函数,所谓友元函数首先它得是一个函数(废话)。其次,这个函数必须被某个类显式的声明为自己的友元函数。

举一个例子:1 class A

2  {

3   friend void setX(A &,int);//申明setX为友元函数

4

5    public:

6      A():x(0){}//初始化x为0

7    private:

8      int x;

9   };

10

11  void setX(A &a,int b)

12  {

13    a.x=b;

14  }

15

16 int main()

17 {

18   A a;

19   int b=10;

20   setX(a,b);

21   return 0;

22  }

整个程序很简单,首先创建一个类A,接着在创建一个赋值函数setX,然后在main中执行给a的私有变量x赋值的操作,然后返回0结束程序。类A中有一个共有的构造方法和一个私有成员变量x。在第3行还申明了一个友元函数setX(A &,int),声明友元函数的方法就是在返回值前加上friend关键字.

setX这个函数是在类外实现的,这个函数的功能也很简单,就是给对象a的私有成员变量x赋值.我们知道,类的私有成员只有自己内部的函数可以访问,在类外部无法直接访问,但setX已经被类A声明为友元函数了,这样,函数setX就可通过a对象直接访问它的私有变量x。

我们子所以使用友元函数,目的就在于可以在外部使用某个类的私有成员变量或是方法。而友元类和友元函数也是一个意思,只需要在类A中申明某个类是它的友元类即可。这样友元类中的方法就可以调用类A中的私有变量和方法了。

比方说小明有一个飞机模型,这个模型是小明私有的,只有小明自己能玩,其他人不能玩。此时小明就相当于类A,模型就相当于私有变量x。可能小明觉得小刚是他的好朋友,所以小刚也可以玩他的飞机模型。写成代码大概是这个样子:

class 小明

{

friend 小刚;

private:

play("飞机模型");//私有方法

};

class 小刚

{

play()

{

小明.play("飞机模型");

}

};

不过友元可不是双向的,而是单向的,这好比小明虽然觉得小刚是朋友,愿意分享自己的玩具给小刚,可小刚不这么想,在他心里有可能并不把小明当朋友,所以当小明想玩一下小刚的玩具的时候,有可能遭到小刚的拒绝,甚至被小刚暴打一顿都有可能。(我看过不少小孩都是不爱和别人分享自己的玩具)

所以朋友这东西和友元一样,都是一厢情愿的,你把别人当朋友,可别人谁拿你当盆菜啊,所以交友需谨慎!^_^

时间: 2024-08-10 19:08:52

论友元函数和友元类的相关文章

【C++基础 05】友元函数和友元类

友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend. 友元不是成员函数,但是它可以访问类中的私有成员. 友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员. 有两种形式的友元: (1)友元函数:普通函数对一个访问某个类中的私有或保护成员. (2)友元类:类A中的成员函数访问类B中的私有或保护成员. 友元函数: 在类声明的任何区域中声明,而定义则在类的外部. frien

C++:友元(非成员友元函数、成员友元函数、友元类)

3.8  友元:友元函数和友元类 友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数.友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的成员,包括私有成员.保护成员和公有成员.在类中声明友元函数时,需在其函数名前加上关键字friend,此声明可以放在公有部分.也可以放在保护和私有部分.友元函数可以定义在类部,也可以定义在类的外部. 3.8.1 将非成员函数声明为友元函数 //1.将非成员函数声明为友元函数 // 例3.33 友元函数

c++友元函数与友元类

1. 友元函数和友元类的需要: 类具有封装和信息隐藏的特性. 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的. 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性. 另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率. 2. 为了解决上述问题,提出一种使用友元的方案. 友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数

[C/C++] 友元函数和友元类

A---友元函数: class Data{ public: ... friend int f(int &m);//友元函数 ... } 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: friend 类型 函数名(形式参数); 1.友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数. 2.一个函数可以是多个类的友元函数

C++ friend友元函数和友元类(转)

一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情况--友元(friend).借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员.fnend 的意思是朋友,或者说是好友,与好友的关系显然要比一般人亲密一些.我们会对好朋友敞开心扉,倾诉自己的秘密,而对一般人会谨言慎行,潜意识里就自我保护.在C+

C++学习12 友元函数和友元类

友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来补充介绍一个例外——友元(friend). 在C++中,这种关系以关键宇 friend 声明,中文多译为友元.友元可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类.如果您对友元这个名词不习惯,可以按原文 friend 理解

友元(友元函数、友元类和友元成员函数) C++

有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响.通常,将友元声明成组地放在类定义的开始或结尾是个好主意. 1.友元函数 友元函数是指某些

C++之友元函数和友元类

通过friend关键字,我们可以将不属于当前类的一个函数在当前类中加以声明,该函数便可以成为当前类的友元函数. #include<iostream>using namespace std; class book{public:    book()    {       cout <<this->price << endl;  //这里是没有赋值的成员变量就使用,这是不可取的       cout << this->title << e

友元——友元可以访问与其有好友关系的类中的私有成员。 友元包括友元函数和友元类。

简介:友元可以访问与其有好友关系的类中的私有成员.    友元包括友元函数和友元类. [1]将普通函数声明为友元函数 #include<iostream> using namespace std; class Time { public: Time(int,int,int); friend void display(Time &);//定义友元函数 private: int hour; int minute; int sec; }; Time::Time(int h,int m,int