|
公有私有成员
查看如下结构体:
struct DateStruct // 结构体成员默认是公有的(public)
{
int month; // 默认公有, 可被任何人访问
int day; // 默认公有, 可被任何人访问
int year; // 默认公有, 可被任何人访问
};
int main()
{
DateStruct date;
date.month = 10;
date.day = 14;
date.year= 2020;
return 0;
}
在这段程序里,我们声明了一个DateStruct并直接访问它的成员来进行初始化。之所有可以这样是因为一个结构体的成员默认是公有的。公有成员是指结构体或者类中可以被外部访问的成员。因此,main函数位于DateStruct外,但我们仍可以直接访问它的成员年、月、日,因为它们是公有的。
另一方面,我们瞧一瞧下面这个类,它和DateStruct几乎相同。
class DateClass // 类成员默认是私有的
{
int m_month; // 默认私有, 只能被其他成员访问
int m_day; // 默认私有, 只能被其他成员访问
int m_year; // 默认私有, 只能被其他成员访问
};
int main()
{
DateClass date;
date.m_month = 10; // 出错
date.m_day = 14; // 出错
date.m_year = 2020; // 出错
return 0;
}
如果你编译这段程序,会报错。这是因为默认情况下,一个类的所有成员都是私有的。私有成员是指结构体或者类中只能被该结构体或类的内部成员访问的成员。因为main函数不是DateClass的内部成员,所以它不能够访问DateClass的内部成员。
访问修饰符
尽管类的成员默认是私有的,但我们可以通过public关键字让它变成公有的。
class DateClass
{
public: // note use of public keyword here, and the colon
int m_month; // public, can be accessed by anyone
int m_day; // public, can be accessed by anyone
int m_year; // public, can be accessed by anyone
};
int main()
{
DateClass date;
date.m_month = 10; // okay because m_month is public
date.m_day = 14; // okay because m_day is public
date.m_year = 2020; // okay because m_year is public
return 0;
}
因为DateClass的成员现在是公有的,所以我们可以直接在main函数里访问了。
public关键字及随后的冒号就是一个访问修饰符。访问修饰符决定了谁可以访问修饰符后边的成员。每一个成员都会活得前面所指定的访问修饰符的访问级别(如果没指定的话,就是用默认访问修饰符)。
C++提供三种不同的访问修饰符关键字:public,private,和protected。public让被修饰的成员变得公有,private让被修饰的成员变得私有。第三个修饰符,即protected,功能跟private类似。在我们之后的章节开始学习继承的时候,我们会讨论一下private和protected修饰符到底有什么区别。
|
|