大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > C++技巧:将数据成员声明为private

C++技巧:将数据成员声明为private(1)

关键词:C++数据成员private  阅读(874) 赞(14)

[摘要]本文是对将数据成员声明为private的讲解,与C++学习者分享。

  一切支持 public 数据成员的理由异常适用于 protected 数据成员。这就导出了数据成员应该是 private 的结论。

  首先,我们将看看为什么数据成员不应该声明为 public。然后,我们将看到一切支持 public 数据成员的理由异常适用于 protected 数据成员。这就导出了数据成员应该是 private 的结论,至此,我们就终了了。

  那么,public 数据成员,为什么不呢?

  我们从先从语法分歧性末尾。假定数据成员不是 public 的,客户拜访一个对象的独一办法就是经过成员函数。假定在 public 接口中的每件东西都是一个函数,客户就不用绞尽脑汁试图记住当他们要拜访一个类的成员时能否需求运用圆括号。他们只需运用就可以了,由于每件东西都是一个函数。终身坚持这一方针,能节省很多挠头的工夫。

  但是也许你不以为分歧性的理由是强迫性的。运用函数可以让你愈加准确地控制成员的可存取性的理想又怎样样呢?假定你让一个数据成员为 public,每一集团都可以读写拜访它,但是假定你运用函数去失掉和设置它的值,你就能完成制止拜访,只读拜访和读写拜访。嘿嘿,假定你需求,你甚至可以完成只写拜访:

class AccessLevels {
 public:
  ...
  int getReadOnly() const { return readOnly; }

  void setReadWrite(int value) { readWrite = value; }
  int getReadWrite() const { return readWrite; }

  void setWriteOnly(int value) { writeOnly = value; }

 private:
  int noAccess; // no access to this int

  int readOnly; // read-only access to this int

  int readWrite; // read-write access to this int

  int writeOnly; // write-only access to this int
};

  这种条分缕析的拜访控制很重要,由于少数数据成员需求被隐藏。每一个数据成员都需求一个 getter 和 setter 的状况是很稀有的。

  还不置信吗?那么该拿出一门重炮了:封装。假定你经过一个函数完成对数据成员的拜访,你可以在当前用一个计算来交流这个数据成员,运用你的类的人不会有任何发觉。

  例如,假定你为一个监视经过的汽车的速度的自动设备写一个运用顺序。每经过一辆汽车,它的速度就被计算,而且那个值要参与到迄今为止搜集到的一切速度数据的集合中:

class SpeedDataCollection {
 ...
public:
 void addValue(int speed); // add a new data value
 double averageSoFar() const; // return average speed
 ...
};

  如今思索成员函数 averageSoFar 的完成:完成它的方法之一是在类中用一个数据成员来实时变化迄今为止搜集到的一切速度数据的均匀值。无论何时 averageSoFar 被调用,它只是前往那个数据成员的值。另一个不同的办法是在每次调用 averageSoFar 时重新计算它的值,经过火析集合中每一个数据值它能做成这些事情。

  第一种办法(坚持一个实时变化的值)使每一个 SpeedDataCollection 对象都比拟大,由于你必需为持有实时变化的均匀值,累计的和以及数据点的数量分配空间。可是,averageSoFar 能完成得十分高效,它仅仅是一个前往实时变化的均匀值的 inline 函数。反过去,无论何时被央求都要计算均匀值使得 averageSoFar 的运转比拟慢,但是每一个 SpeedDataCollection 对象都比拟小。

«上一页12下一页»


相关评论