关键字-protected使用总结

为了更好说明,首先定义一个基类如下,里面包含三种不同访问类型的成员函数
class Base{
public:
	void pub_mem() {}
protected:
	void prot_mem() {}
protected:
	void priv_mem() {}	
};
①派生类成员或友元可访问基类受保护成员,但只能通过派生类访问;
struct Derv:public Base{
	//1.通过友元友元 	
	friend void func(Derv &d) 
	{ d.prot_mem(); }	
	
	//2.通过成员函数
	void func() {prot_mem();}  //相当于this->prot_mem();  
	
	//3.派生类的成员或友元中不能通过基类访问受保护成员
	friend void func(Base &b) { b.prot_mem(); }   //错误:不能通过基类访问
	
};
②受保护的成员对于类的用户是不可访问的, 注意:上题错误,相当于在类用户访问受保护类如下
int main() {
	Base b;
	b.prot_mem(); //错误
	b.priv_mem(); //错误
	b.pub_mem();  //正确 
}
③派生访问说明符对于派生类成员及友元访问 直接基类 没有影响
//示例中,Pub_Derv,Prot_Derv,Priv_Derv都能访问prot_mem(),但均不能访问priv_mem();
struct Pub_Derv:public Base{
	
	int f() {prot_mem();}  //正确
	int g() {priv_mem();}  //错误
};

struct Prot_Derv: protected Base{
	int f() {prot_mem();}  //正确
	int g() {priv_mem();}  //错误
};  

struct Priv_Derv: private Base{
	int f() {prot_mem();}  //正确
	int g() {priv_mem();}  //错误
};  
④派生访问说明符目的是控制派生类用户(包括【派生类的派生类】)对基类成员的访问权限
一)public派生说明符:基类的访问权限不会改变
struct Pub_Derv: public Base{};
//例子1,类用户
Pub_Derv d;
d.pub_mem();  //正确

//例子2,派生类的派生类
struct Derived_from_Public: public Pub_Derv{
	int use_base() { return  prot_mem(); } //正确
};
二)protected派生说明符:基类的private,protected成员访问权限不变,但public成员将变为protected;
struct Prot_Derv: protected Base{};
//例子1,类用户
Prot_Derv d;
d.pub_mem();   //错误

//例子2,派生类的派生类
struct Derived_from_protected: protected Pub_Derv{
	int use_base() {
		pub_mem();   //正确
		prot_mem();  //正确
	} 
};
三)private派生说明符:基类的所有成员访问权限都为private
struct Priv_Derv: private Base{}

//例子1,类用户
Priv_Derv d;
d.pub_mem();  //错误

//例子2,派生类的派生类
struct Derived_from_private: private Pub_Derv{
	int use_base() {
		pub_mem();   //错误
	} 
};










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值