c++primer 第十五笔记 访问控制与继承

15.5 访问控制与继承

protected:它希望与派生类分享但是不想被其他公共访问使用的成员
一些性质:
和私有成员类似,受保护的成员对于类的用户来说是不可访问的
和公有成员类似,受保护的成员对于派生类的成员和友元来说是可访问的
派生类的成员或友元只能通过派生类对象来访问基类的受保护成员
派生类对于一个基类对象中的受保护成员没有任何访问特权

class Base
{
   
protected:
	int prot_mem;


};

class Sneaky :public Base
{
   
	friend void clobber(Sneaky&);
	friend void clobber(Base&);
	int j;
};

void clobber(Sneaky& s)
{
   
	s.j = s.prot_mem = 0; //继承的派生类对象可以访问protected
}

void clobber(Base& b)
{
   
	b.prot_mem = 0; //报错,因为它只是Sneaky的友元,但不是Base的友元。
}

公有,私有和受保护继承
某个类对其继承而来的成员的访问权限受到两个因素影响:
1:基类中该成员的访问说明符
2.派生类的派生列表中的说明符

class Base
{
   
protected:
	int prot_mem;


public:
	void pub_mem();

private:
	char priv_mem;
};
struct Pub_Derv :public Base
{
   
	int f()
	{
   
		return prot_mem; //protected是受派生类可访问的
	}

	char g()
	{
   
		//return priv_mem; 报错,对于派生类来说,private成员是不可访问的
	}

};

struct Priv_Derv :private Base
{
   
	int f1()const
	{
   
		return prot_mem;  //继承的private并不影响派生类的访问权限
	}

	char c2()const
	{
   
		// return priv_mem;//私有的成员还是不能被派生类访问 
		//就是说你派生类的访问说明符对派生类的成员能否访问其直接基类的成员没什么影响,
		//对基类中的访问说明符对基类的访问权限才是有关的
	}
};
//class Sneaky :public Base
//{
   
//	friend void clobber(Sneaky&);
//	friend void clobber(Base&);
//	int j;
//};
//
//void clobber(Sneaky& s)
//{
   
//	s.j = s.prot_mem = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值