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

时间:2017-09-14 07:42:43

标签: c++ private 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。但我仍然在努力应对背后的逻辑。那么成为私人数据成员意味着什么?

4 个答案:

答案 0 :(得分:2)

这里的主要想法是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);
}

答案 1 :(得分:1)

setTime是Class clocktype的一部分,因此它可以访问私有成员。

私人通常意味着,它是私人的 - 意味着,只有班级中的成员才能访问它。

答案 2 :(得分:1)

默认情况下,C ++中的类成员是私有的,这意味着您无法通过任何外部对象(在main中)访问它们。如果在类中定义[不仅仅声明] setTime函数,这是私有成员的友元函数,则可以使用main中的对象初始化私有成员。

class clocktype;
{ 
 private:
          int hr;
          int min;
          int sec;

  public:
          void setTime(int hour,int minute,int min)
 {
  if (0<= hour && hour < 24)
  hr = hour;

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

  if ( 0<= second && second<60)
  sec = second;
  }
 };

只需声明一个对象(在main中)并调用setTime即可。

答案 3 :(得分:1)

在编程语言中编写函数或类(元素/符号)时,有两件事要做:

  1. 如何使用元素,这称为接口,这是使用它的程序员所接触到的
  2. 哪些元素有用,这被称为实现,它不一定暴露,可以改变,因为它通常会有问题并且可以随着时间的推移而发展(理想情况下)
  3. 这个想法很简单,界面就像你的函数setTime()一样,可以在类中做多个事情。除了改变一些变量之外,设置时间在未来可能需要更多的调用或更复杂的事情,或者对于其他操作系统可能不同。现在,对于收到了新版本库并修复了错误的类的用户来说,它不会有所作为,因为他仍然使用相同的参数调用相同的函数,并且唯一的区别对他来说,该功能的作用是什么是固定的。因此,他不必修改他的代码以适应您的新修复,并且您阻止他使用您班级的变量,因为这不是您在设计中的计划。您计划让他专门使用setTime()

    所以,基本上,它只是交换库的程序员内部的东西。它只是编写代码的一种简洁方式。最终,对于程序运行的最终结果,一切都是公开的并不会产生影响。换句话说:它是编程游戏,我们遵循我们创建的规则,以保证代码清晰和长期稳定。