《C++ Primer》派生类到基类转换的可访问性

没想到书上的短短几句话,我竟研究了一个晚上,不多说了,请看派生类到基类转换的可访问规则:

访问规则:
1.如果是 
public 继承,则用户代码和后代类都可以使用派生类到基类的转换。
2.如果类是使用 
private  protected继承派生的,则用户代码(即派生类对象)不能将派生类型对象转换为基类对象。
3.如果是 
private 继承,则从 private 继承类派生的类不能转换为基类。
4.如果是 
protected
 继承,则后续派生类的成员可以转换为基类类型。

5.无论是什么派生访问标号,派生类本身都可以访问基类的 public 成员,因此,派生类本身的成员和友元总是可以访问派生类到基类的转换。

我的疑惑在第4条,我发现在VC6.0下和C-Free下都不能验证该条件成立,如果大家有好的见解,请告诉我,谢谢!

下面是我的验证代码:
//p489 派生类到基类转换的可访问性 
#include<iostream>
using namespace std;

class A{};

class B:public A{};
class C:protected A{};
class D:private A{};

class E:public B{};
class F:public C{};
class G:public D{};

int main(){
    A *pb, *pc, *pd, *pe, *pf, *pg;
    pb = new B;    	// 正确 public派生,可以转换[*B ---> *A].
    pc = new C; 	// 错误 protected派生,不可转换[*C -\-> *A].
    pd = new D; 	// 错误 private派生,不可转换[*D -\-> *A].
    pe = new E; 	// 正确 public派生的子类,可以转换[*E ---> *A].
    pf = new F; 	// 错误(按话的意思是正确,但VC编译是错误)protected派生的子类.
    pg = new G; 	// 错误 private派生的子类,不可转换[*G -\-> *A].
    
    return 0; 
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值