首页 文章

成为私人会员(c班)意味着什么?

提问于
浏览
4

我对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 回答

  • 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即可 .

  • 1

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

    私有通常意味着,它是私有的 - 意味着,只有类中的成员才能访问它 .

  • 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

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

    • 如何使用元素,这被称为 interface ,这是使用它的程序员所接触到的

    • 什么元素做了,这被称为 implementation ,它不一定暴露,可以改变,因为它通常会有问题并且可以随着时间的推移而发展(理想情况下)

    这个想法很简单,界面就像你的函数 setTime() ,可以在类中做多个事情 . 除了改变一些变量之外,设置时间在将来可能需要更多的调用或更复杂的事情,或者对于其他操作系统可能不同 . 现在对于你的类的用户来说,他们收到了一个带有bug修复的库的新版本,它仍然使用相同的参数调用了相同的函数,并且唯一不同的是它修复了该函数所做的事情 . 所以,他并不是你设计中的计划 . 你计划让他特别使用 setTime() .

    所以,基本上,它只是一种编写代码的简洁方式 . 最终,对于程序运行的最终结果,它不是编程游戏,我们遵循我们创建的规则,以保证清晰的代码和长期稳定性 .

相关问题