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

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

【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 s)
{
        hour = h;
        minute = m;
        sec = s;
}

void display(Time&t)
{
        cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
/*由于声明了display Timedisplay是Time
  friend函数,所以Time display函数可以引用Time
  display  Time中的私有成员 hour,minute,sec。
  但注意在引用这些私有数据成员
  hour,minute,sec时,必须加上对象名,不能写成
  cout<<hour<<′′:′′<<minute<<′′:′′<<sec<<endl;
*/
int main()
{
        Time t1(10,13,56);
        display(t1);
        return 0;
}

 

【2】一个函数(包括普通函数和成员函数)可以被多个
  类声明为“朋友”,这样就可以引用多个类中的私有
  数据

#include<iostream>
using namespace std;
class Date;
class Time
{
        public:
                Time(int,int,int);
                void display(Date &);//display 是成员函数,形式参数date类的
        private:
                int hour;
                int minute;
                int sec;

};

class Date
{
        public:
                Date(int,int,int);
                friend void Time::display(Date&);//声明time中的display函数为友元函数
        private:
                int month;
                int day;
                int year;

};

Time::Time(int h,int m,int s)
{
        hour = h;
        minute = m;
        sec = s;
}

void Time::display(Date &d)
{
        cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;//引用date类的私有数据
        cout<<hour<<":"<<minute<<":"<<sec<<endl;//引用本类中的私有数据

}

Date::Date(int m,int d,int y)
{
        month = m;
        day = d;
        year = y;
}
int main()
{
        Time t1(10,13,56);
        Date d1(12,25,2004);
        t1.display(d1);
        return 0;
}

友元比较好的博客推荐:

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

时间: 2024-10-27 00:57:32

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

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++基础 05】友元函数和友元类

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

c++友元函数与友元类

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

C++之友元机制(友元函数和友元类)

一.为什么引入友元机制? 总的来说就是为了让非成员函数即普通函数或其他类可以访问类的私有成员,这确实破坏了类的封装性和数据的隐蔽性,但为什么要这么做呢? (c++ primer:尽管友元被授予从外部访问类的私有部分的权限,但它并不与面向对象的编程思想相悖,相反,他们提高了公有接口的灵活性).要理解这句话,就必须知道友元形成的过程:(任何函数,或者成员函数或者类想成为某个类的友元,这是由这个类来决定的,而不能从外部强加友情) 我们已知道类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成

友元函数和友元类

友元全局函数以及友元成员函数 关键字: friend class A{ //友元全局函数 friend void printXY(A & a); //友元成员函数,是B的成员函数 friend void B::printXY(A & a); public: A(int a,int b){} private: int m_a; int m_b; }; class B{ public: void printXY(A & a){ cout<< a.m_a<<end

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

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

友元函数和友元类声明举例

注: 友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend.友元不是成员函数,但是它可以访问类中的私有成员.所以,友元声明只能出现在类定义中.因为友元不是授权类的成员,所以它不受其所在类的声明区域public private 和protected 的影响.即友元函数的声明可以出现在类的任何地方 class A { friend class A_friend_class; friend void A_friend_func

第十六周oj刷题——Problem I: 改错题:类中私有成员的访问

Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间.要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年.月.日和时.分.秒. Input 年      月       日 时      分       秒 Output 年/月/日 时:分:秒 Sample Input 2013 12 23 14 23 50 Sample Ou