成为私人成员(C 类)意味着什么
What does it mean to be a private member (c++ classes)?
我对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
。但是我仍在为背后的逻辑挣扎。那么,成为私人数据成员意味着什么?
这里的主要思想是封装。区分私人数据成员和公共设置方法将使您可以更改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);
}
C 中的类成员默认为私有,这意味着您无法通过任何外部对象访问它们(主要)。如果您定义[不仅声明]类中的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;
}
};
只需声明一个对象(主)并调用settime,它将起作用。
settime是类clocktype的一部分,因此它可以访问私人成员。
私人通常意味着它是私人的类 - 含义,含义,只有班级中的成员才能访问它。
在编写函数或类(元素/符号)中有两件事要做:
:- 如何使用元素,这称为接口,这是使用IT 对程序员暴露的内容
- 元素的作用,这称为实现,它不一定会暴露,并且可以改变,因为它通常可以存在问题,并且可以随着时间的推移(理想情况下)开发(理想情况下)
这个想法仅仅是类似于您的函数setTime()
的接口可以在类内部完成多个事情。将来的设定时间还需要更多的呼叫或更复杂的事物,除了更改某些变量,或者对于其他操作系统可能会有所不同。现在,您的班级用户收到了带有错误修复的新版本的库,这不会有所作为,因为他仍在使用相同的参数调用相同的功能,而对他的唯一区别是该函数的作用是固定的。因此,他不必重新设计自己的代码来适合您的新修复程序,并且您可以阻止他使用班级的变量,因为那不是您在设计中计划的。您计划他专门使用setTime()
。
因此,基本上,这只是交换库的程序员的内部内容。这只是编写代码的一种干净的方式。最终,对于该程序运行时的最终结果,无论一切是否公开,都不会有任何不同。换句话说:这是编程游戏,我们按照我们创建的规则进行演奏,以确保清洁代码和长期稳定性。
- 这行代码在C++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它