我对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 回答
默认情况下,C中的类成员是私有的,这意味着您无法通过任何外部对象(在main中)访问它们 . 如果在类中定义[不仅仅声明] setTime函数(私有成员的友元函数),则可以使用main中的对象初始化私有成员 .
只需声明一个对象(在main中)并调用setTime即可 .
setTime是Class clocktype的一部分,因此它可以访问私有成员 .
私有通常意味着,它是私有的 - 意味着,只有类中的成员才能访问它 .
这里的主要想法是encapsulation . 区分私有数据成员和公共setter方法将允许您更改
clocktype
类的实现,而不是要求使用它的每个人重新编译其代码 . 让我们决定改变clocktype
实现来存储从一天开始的秒数 . 您需要做的就是重新实现setTime
方法,您不必触摸公共接口:在编程语言中编写函数或类(元素/符号)时,有两件事要做:
如何使用元素,这被称为 interface ,这是使用它的程序员所接触到的
什么元素做了,这被称为 implementation ,它不一定暴露,可以改变,因为它通常会有问题并且可以随着时间的推移而发展(理想情况下)
这个想法很简单,界面就像你的函数
setTime()
,可以在类中做多个事情 . 除了改变一些变量之外,设置时间在将来可能需要更多的调用或更复杂的事情,或者对于其他操作系统可能不同 . 现在对于你的类的用户来说,他们收到了一个带有bug修复的库的新版本,它仍然使用相同的参数调用了相同的函数,并且唯一不同的是它修复了该函数所做的事情 . 所以,他并不是你设计中的计划 . 你计划让他特别使用setTime()
.所以,基本上,它只是一种编写代码的简洁方式 . 最终,对于程序运行的最终结果,它不是编程游戏,我们遵循我们创建的规则,以保证清晰的代码和长期稳定性 .