类成员的访问范围说明符

class CBase
{
private:
	int nPrivate;				// 私有成员
public:
	int nPublic;				// 公有成员
protected:
	int nProtected;				// 保护成员
};
class CDerived :public CBase
{
	void AccessBase(CDerived& cd)
	{
		nPublic = 1;			// OK
		//nPrivate = 1;			// 错,不能访问基类私有成员
		nProtected = 1;			// OK,访问从基类继承的 protected 成员
		CBase f;
		//f.nProtected = 1;		// 错,在派生类的成员函数中不能访问其他基类对象的基类保护成员
		cd.nProtected = 1;		// OK,在类的成员函数内部可以访问同类其他对象的全部(私有,保护,公有)属性和函数
	}
};

int main()
{
	CBase b;
	CDerived d;
	//int n = b.nProtected;		// 错,在类的成员函数外部,不能访问基类保护成员
	//n = d.nPrivate;			// 错,此处不能访问d的私有成员
	d.nPublic = 10;				// OK
	return 0;
}

注意区分示例程序第18行与第19行!!!

在类的定义中,可以用 private , protected , public 三种关键字来指定成员可被访问的范围。

  • private : 用来指定私有成员。一个类的私有成员,不论是成员变量还是成员函数,都只能在本类的成员函数内部才能被访问。因此,在类的成员函数内部,既能够访问当前对象的全部属性、函数,也可以访问同类其他对象的全部属性、函数。 ——示例程序第19行
  • public : 用来指定公有成员。一个类的公有成员在任何地方都可以被访问。
  • protected : 用来指定保护成员。保护成员的可访问范围比私有成员大,比公有成员小。能访问私有成员的地方都能访问保护成员。保护成员扩大的范围表现在:基类的保护成员可以在派生类的成员函数中被访问。不过需要注意的是,派生类的成员函数只能访问所作用的那个对象(即this指针指向的对象)的基类保护成员,不能访问其他基类对象的基类保护成员。 ——示例程序第18行

三种关键字出现的次数和先后次序都没有限制。成员的可访问范围由离它前面最近的那个访问范围说明符决定。如果某个成员前面没有访问范围说明符,则对class来说,该成员默认地被认为是私有成员;对struct来说,该成员默认地被认为是公有成员。

posted @ 2020-10-24 09:44  ltimaginea  阅读(123)  评论(0编辑  收藏  举报