考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > C++语言程序设计 > C++辅导 > 文章内容
  

计算机等级考试二级C++语言程序设计辅导笔记:私有数据成员和友元

中华IT学院   【 】  [ 2017年6月3日 ]

  5.友元函数

  通常,除非真的需要,否则并不需要把整个类都设为另一个类的友元,只需挑出需要访问当前类私有数据成员的成员函数,将它们设置为该类的友元即可。这样的函数称为友元函数。

  下面的程序限制了CustomDate类数据成员的访问,Date类中只有需要这些数据的成员函数才有权读写它们。

  #include iostream.h

  class CustomDate;

  class Date

  {

  int mo,da,yr;

  public:

  Date(const CustomDate&);

  void display() const {cout< };

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate(int d=0,int y=0) { da=d; yr=y; }

  friend Date::Date(const CustomDate&);

  };

  Date::Date(const CustomDate& cd)

  {

  static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  yr=cd.yr;

  da=cd.da;

  for(mo=0;mo<11;mo++)

  if(da>dys[mo]) da-=dys[mo];

  else break;

  mo++;

  }

  int main()

  {

  Date dt(CustomDate(123, 89));

  dt.display();

  return 0;

  }

  6.匿名对象

  上面main()函数中Date对象调用CustomDate类的构造函数创建了一个匿名CustomDate对象,然后用该对象创建了一个Date对象。这种用法在C++中是经常出现的。

  7.非类成员的友元函数

  有时候友元函数未必是某个类的成员。这样的函数拥有类对象私有数据成员的读写权,但它并不是任何类的成员函数。这个特性在重载运算符时特别有用。

  非类成员的友元函数通常被用来做为类之间的纽带。一个函数如果被两个类同时声明为友元,它就可以访问这两个类的私有成员。下面的程序说明了一个可以访问两个类私有数据成员的友元函数是如何将在两个类之间架起桥梁的。

  #include iostream.h

  class Time;

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m,int d,int y) { mo=m; da=d; yr=y;}

  friend void display(const Date&, const Time&);

  };

  class Time

  {

  int hr,min,sec;

  public:

  Time(int h,int m,int s) { hr=h; min=m; sec=s;}

  friend void display(const Date&, const Time&);

  };

  void display(const Date& dt, const Time& tm)

  {

  cout << dt.mo << '/' << dt.da << '/' << dt.yr;

  cout << ' ';

  cout << tm.hr << ':' << tm.min << ':' << tm.sec;

  }

  int main()

  {

  Date dt(2,16,97);

  Time tm(10,55,0);

  display(dt, tm);

  return 0;

  }

首页 1 2 3 尾页
分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved