2011年计算机等级考试二级C++辅导笔记:私有数据成员和友元

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  一、私有数据成员的使用
  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对象并将其作为函数返回值。

上一页123下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答