protect 继承_public、protect、private继承方式 C++

public公有继承

protected保护继承

private私有继承

我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.

公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用.

保护继承时,基类的private成员仍为有私有.基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员

私有继承时,基类的private成员仍为有私有.基类的public和protected成员将变成派生类的private成员.

举个例子.

class A

{

public:

int m_nTelNum;

protected:

int m_nAge;

private:

int m_nMoney;

};

class B : public A

{

void SetTelNum(int

nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney; }

//这里就出现错误,因为基类的private成员不能用.

};

B objB;

//创建B类的对象objB

objB.m_nTelNum=123456;//可以

objB.m_nAge=30;

//错误.

public继承中基类的protected在派生类中是protected

objB.m_nMoney=100;

//更错误,在派生类中都不可以直接使用.在类外就更不能了.

class C : protected A

{

void SetTelNum(int

nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney; }

//这里就出现错误,因为这是基类的private成员不能用.

};

C objC;//创建C类的对象objC

objC.m_nTelNum=123456;//注意这里和public的区别,这里错误,m_nTelNum变成了C类的protected成员

objC.m_nAge=30;//错误.protected继承中基类的protected在派生类中是protected,这与public同相

objC.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.

class D : private A

{

void SetTelNum(int

nTelNum)

{ m_nTelNum=nTelNum; }

void SetAge(int nAge)

{ m_nAge=nAge; }

void SetMoney(int nMoney)

{ m_nMoney=nMoney;

//这里就出现错误,因为这是基类的private成员不能用.

} };

D objD;//创建D类的对象

objD

objD.m_nTelNum=123456;//错误,m_nTelNum变成了D类的private成员

objD.m_nAge=30;//错误.private继承中基类的protected在派生类中是private

objD.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.

从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同.现在还看不出public和protected继承的区别

那再看一个例子.

class E:public B

{

void SetTelNum(int

nTelNum)

{

m_nTelNum=nTelNum;//可以

因为这是B的公有成员

} void SetAge(int nAge)

{ m_nAge=nAge;//可以

因为这是B的保护成员,现成变成E的protected成员

}

void SetMoney(int

nMoney) { m_nMoney=nMoney;//这个肯定不可以! } };

E objE;

objE.m_nTelNum=123456;//可以

//其它的两个就不能用了.

class F:public C

{ void SetTelNum(int

nTelNum)

{

m_nTelNum=nTelNum;//可以

因为这是C的保护成员,这里与public继承已经有区别但还没有表现出来

}

void SetAge(int nAge) {

m_nAge=nAge;//可以

因为这是C的保护成员,现成变成E的protected成员

}

void SetMoney(int nMoney)

{

m_nMoney=nMoney;//这个肯定不可以! } };

F objF;

objF.m_nTel=123456;//错误,因为这是F的保护成员.注意与E类区别

class G : public D

{

void SetTelNum(int

nTelNum)

{

m_nTelNum=nTelNum;//不可以

因为这是D的private成员,注意这里区别

}

void SetAge(int nAge)

{ m_nAge=nAge;//不可以

因为这是D的private成员,注意区别

}

void SetMoney(int nMoney)

a4c26d1e5885305701be709a3d33442f.png

上表是对该文档的总结,即基类中的private在任何情况下子类及子类外均不可用,虽然子类继承了它。其他成员按相应继承方式转化为相应类型的成员,并在子类内可以访问,在子类外是否可用主要取决于继承后成员属性的访问说明符,这和正常的类成员一样。

protected和private的区别:

protected  与private只有在继承是才起到作用.

protect  和privete  主要是描述定义类成员的时候用到,主要作用是对该类的派生类成员调用该类成员的权限问题`````

protect的成员只有派生类和自己能访问。

也就是说,这种成员,对于派生类,相当于public,而对于外部,相当于private。

c++里面的protect和public、private有什么区别?

public修饰的成员变量

在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问

private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏

protected是受保护变量

类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值