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

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

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

  一、私有数据成员的使用

  1.取值和赋值成员函数

  面向对象的约定就是保证所有数据成员的私有性。一般我们都是通过公有成员函数来作为公共接口来读取私有数据成员的。某些时候,我们称这样的函数为取值和赋值函数。

  取值函数的返回值和传递给赋值函数的参数不必一一匹配所有数据成员的类型。

  #include iostream.h

  class Date

  {

  int mo, da, yr;

  public:

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

  int getyear() const { return yr; }

  void setyear(int y) { yr = y; }

  };

  int main()

  {

  Date dt(4,1,89);

  cout< dt.setyear(97);

  cout< return 0;

  }

  上面的例子很简单,不分析了。要养成这样的习惯,通过成员函数来访问和改变类中的数据。这样有利于软件的设计和维护。比如,改变Date类内部数据的形式,但仍然用修改过的getyear()和setyear()来提供访问接口,那么使用该类就不必修改他们的代码,仅需要重新编译程序即可。

  2.常量成员函数

  注意上面的程序中getyear()被声明为常量型,这样可以保证该成员函数不会修改调用他的对象。通过加上const修饰符,可以使访问对象数据的成员函数仅仅完成不会引起数据变动的那些操作。

  如果程序声明某个Date对象为常量的话,那么该对象不得调用任何非常量型成员函数,不论这些函数是否真的试图修改对象的数据。只有把那些不会引起数据改变的函数都声明为常量型,才可以让常量对象来调用。

  3.改进的成员转换函数

  下面的程序改进了从Date对象到CustomDate对象的成员转换函数,用取值和赋值函数取代了使用公有数据成员的做法。(以前的程序代码在上一帖中)

  #include iostream.h

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate() {}

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

  void display() const {cout< int getday() const { return da; }

  void setday(int d) { da=d; }

  };

  class Date

  {

  int mo,da,yr;

  public:

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

  operator CustomDate() const;

  };

  Date::operator CustomDate() const

  {

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

  CustomDate cd(0,yr);

  int day=da;

  for(int i=0;i cd.setday(day);

  return cd;

  }

  int main()

  {

  Date dt(11,17,89);

  CustomDate cd;

  cd=dt;

  cd.display();

  return 0;

  }

  注意上面的程序中Date::operator CustomDate()声明为常量型,因为这个函数没有改变调用它对象的数据,尽管它修改了一个临时CustomDate对象并将其作为函数返回值。

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