私有成员是什么意思 (c++ 类)?
What does it mean to be a private member (c++ classes)?
我对 C++ 中的私有数据成员有点困惑 类。我是编码的新手,还处于 'Classes' 章节的中间,所以我可能超前了,但我觉得我错过了一条信息:
假设我有这个代码:
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
只能访问 public 成员。但这实际上不是我在 setTime
函数中所做的吗?我知道我正在通过我的 public 成员函数访问 myclock.hr
。但我仍在为这背后的逻辑而苦苦挣扎。那么成为私有数据成员意味着什么呢?
setTime 是 Class 时钟类型的一部分,因此它可以访问私有成员。
私有通常意味着,它对 class 是私有的 - 这意味着只有 class 中的成员可以访问它。
这里的主要思想是encapsulation。区分私有数据成员和 public setter 方法将允许您更改 clocktype
class 的实现,而不需要每个使用它的人重新编译他们的代码。假设,为了争论起见,您决定更改 clocktype
实现以存储从一天开始算起的秒数。您需要做的就是重新实现 setTime
方法,而不必触摸 public 界面:
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);
}
Class C++ 中的成员默认是私有的,这意味着您不能通过任何外部对象(在 main 中)访问它们。如果您在 class 中定义 [不只是声明] 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 即可。
用编程语言编写函数或 class(element/symbol)时有两件事要做:
- 如何使用元素,这称为接口,这是向使用它的程序员公开的内容
- 元素做什么,这叫做实现,不一定暴露,可以改变,因为一般都会有问题,可以随着时间发展(理想情况下)
这个想法很简单,就像你的函数 setTime()
一样,接口可以在 class 中做很多事情。设置时间在未来可能需要更多的调用或更复杂的事情,除了改变一些变量,或者对于其他操作系统可能不同。现在对于你的 class 的用户来说,他收到了你的库的新版本并修复了错误,这不会有什么不同,因为他仍然使用相同的参数调用相同的函数,这对他来说是唯一的不同那个函数的作用是固定的。因此,他不必重新编写代码以适应您的新修复,并且您可以防止他使用您的 class 的变量,因为这不是您在设计中计划的。你计划让他专门使用 setTime()
。
所以,基本上,它只是交换库的程序员内部的东西。这只是一种干净的代码编写方式。最终,对于程序运行时的最终结果,一切是否public都没有区别。换句话说:这是 编程游戏 ,我们按照自己创建的规则进行游戏,以保证干净的代码和长期的稳定性。
我对 C++ 中的私有数据成员有点困惑 类。我是编码的新手,还处于 'Classes' 章节的中间,所以我可能超前了,但我觉得我错过了一条信息:
假设我有这个代码:
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
只能访问 public 成员。但这实际上不是我在 setTime
函数中所做的吗?我知道我正在通过我的 public 成员函数访问 myclock.hr
。但我仍在为这背后的逻辑而苦苦挣扎。那么成为私有数据成员意味着什么呢?
setTime 是 Class 时钟类型的一部分,因此它可以访问私有成员。
私有通常意味着,它对 class 是私有的 - 这意味着只有 class 中的成员可以访问它。
这里的主要思想是encapsulation。区分私有数据成员和 public setter 方法将允许您更改 clocktype
class 的实现,而不需要每个使用它的人重新编译他们的代码。假设,为了争论起见,您决定更改 clocktype
实现以存储从一天开始算起的秒数。您需要做的就是重新实现 setTime
方法,而不必触摸 public 界面:
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);
}
Class C++ 中的成员默认是私有的,这意味着您不能通过任何外部对象(在 main 中)访问它们。如果您在 class 中定义 [不只是声明] 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 即可。
用编程语言编写函数或 class(element/symbol)时有两件事要做:
- 如何使用元素,这称为接口,这是向使用它的程序员公开的内容
- 元素做什么,这叫做实现,不一定暴露,可以改变,因为一般都会有问题,可以随着时间发展(理想情况下)
这个想法很简单,就像你的函数 setTime()
一样,接口可以在 class 中做很多事情。设置时间在未来可能需要更多的调用或更复杂的事情,除了改变一些变量,或者对于其他操作系统可能不同。现在对于你的 class 的用户来说,他收到了你的库的新版本并修复了错误,这不会有什么不同,因为他仍然使用相同的参数调用相同的函数,这对他来说是唯一的不同那个函数的作用是固定的。因此,他不必重新编写代码以适应您的新修复,并且您可以防止他使用您的 class 的变量,因为这不是您在设计中计划的。你计划让他专门使用 setTime()
。
所以,基本上,它只是交换库的程序员内部的东西。这只是一种干净的代码编写方式。最终,对于程序运行时的最终结果,一切是否public都没有区别。换句话说:这是 编程游戏 ,我们按照自己创建的规则进行游戏,以保证干净的代码和长期的稳定性。