作为私有成员(c++类)意味着什么?

2022-06-14 00:00:00 private c++ members

我对C++类中的私有数据成员感到有点困惑。我是编程新手,还在学习《课程》一章,所以我可能有些超前了,但我觉得我漏掉了一条信息:

假设我有这样的代码:

class clocktype;
{ 
  public:
          void setTime(int,int,int);
          .
          .
          .
   private:
          int hr;
          int min;
          int sec;
     };

并且我创建了一个myClock对象。

clocktype myclock;
myclock::setTime(hour,minute,min)
{
  if (0<= hour && hour < 24)
  hr = hour;

  if (0<= minute && minute <60)
  min = minute;

  if ( 0<= second && second<60)
  sec = second;
 }
 myclock.setTime(5,24,54);

我的课本上说我不能这样做:

myclock.hr = 5;

因为hr是私有数据成员,而对象myclock只能访问公共成员。但这不是我在setTime函数中实际上正在做的事情吗?我知道我正在通过我的公共成员函数访问myclock.hr。但我仍在为背后的逻辑而苦苦挣扎。那么,成为私有数据成员意味着什么?


解决方案

这里的主要思想是encapsulation。区分私有数据成员和公共setter方法将允许您更改clocktype类的实现,而不需要使用它的每个人重新编译他们的代码。为了便于讨论,我们假设您决定更改clocktype实现来存储从一天开始算起的秒数。您所需要做的就是重新实现setTime方法,而不必触及公共接口:

class clocktype;
{ 
    public:
        void setTime(int,int,int);
    private:
        int secFromMidnight;
};

clocktype myclock;
myclock::setTime(hour, minute, second)
{
    secFromMinight = second + (minute * 60) + (hour * 24 * 60);
}

相关文章