private和protected继承区别

 
#include <iostream>
using namespace std;
class Shape
{
private:
//protected:
	int a;
public:
	Shape();
	Shape(int m):a(m){}
	int *geta(Shape*ss){return &ss->a;}
	virtual void show(){cout<<"a="<<a<<endl;}
};
class Cir:public Shape
{
private:
	int b;
public:
	Cir();
	Cir(int m,int n):Shape(m),b(n){ b=*this->geta((Shape*)this);  }//通过指针避开编译器获得基类private成员
	int bar(Shape*f)
	{
		b=*f->geta(f);
		return b;
	}
	void show(){cout<<"b="<<b<<endl;}
};
int main()
{
	//Shape sh(1);
	Cir cir(1,2);
	cir.show();//b=1,注意b的值在构造函数中被a替代了,所以此处b不为2
	//cir.bar(&sh);//a赋予b
	//cir.show();//b=1
	system("pause");
return 0;
}
 

//有一部分代码没有意义可以忽略

回避protected和private继承,只针对public继承对于类成员访问权限的限制:

private和protected基类中private成员,子类中无法直接使用(*即便是在类内部作用域中也不可访问*),类对象更加不可访问。上例使用指针回避编译错误,访问类子类中继承的private成员; ( 结合初始化成员列表的作用???)

基类中的protected成员,子类中可以直接使用,但类作用域外、类对象无法调用,相当于在子类定义中添加了该成员的protected定义protected是为了继承而生的三层控制层次,类内存在但不可访问,类内可访问类外不可访问,类内外都可访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值