类的三种继承方式的访问权限.

    每次写类需要用到继承关系的时候我都习惯性的用public,而有些时候用其它两种继承方式
(保护继承和私有继承)还是比较方便的,但是自己但是就是想不起来用,看到别人用它而设计出的
类机构很好的时候游羡慕不已,我以前学习C++的时候也注意过这两种继承方式各个区域(public,
protected,private)的访问权限问题,当时是死记住的,过一段时间就忘记了, 记不住,今天就又遇
到了这种情况,于是决定写个测试程序测试一下,然后总结一下,我觉得应该记忆深刻一点,呵呵,
说做就做!

//test.cpp
#include <iostream>
using namespace std;

class Base
{
public:
    Base(int pubValue,int proValue,int priValue)
        :pubValue_(pubValue),
        proValue_(proValue),
        priValue_(priValue){
    }

public:
    void Base_TestFun_Pub(){
        cout<<"Call Base_TestFun_Pub ..."<<endl;
    }
    int pubValue_;

protected:
    void Base_TestFun_Pro(){
        cout<<"Call Base_TestFun_Pro ..."<<endl;
    }
    int proValue_;

private:
    void Base_TestFun_Pri(){
        cout<<"Call Base_TestFun_Pri ..."<<endl;
    }
    int priValue_;
};

class PublicDerived:public Base
{
public:
    PublicDerived():Base(10,20,30){}

public:
    void PublicDerived_TestFun_Pub(){
        cout<<"Call PublicDerived_TestFun_Pub ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
        //Base_TestFun_Pri();
        //++priValue_;
    }

protected:
    void PublicDerived_TestFun_Pro(){
        cout<<"Call PublicDerived_TestFun_Pro ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
       // Base_TestFun_Pri(); // access error
       // ++priValue_;        // access error
    }

private:
    void PublicDerived_TestFun_Pri(){
        cout<<"Call PublicDerived_TestFun_Pri ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri();// access error
      //  ++priValue_;        // access error
    }
};

class ProtectedDerived:protected Base
{
public:
    ProtectedDerived():Base(10,20,30){}

public:
    void ProtectedDerived_TestFun_Pub(){
        cout<<"Call ProtectedDerived_TestFun_Pub ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri(); // access error
      //  ++priValue_;        // access error
    }

protected:
    void ProtectedDerived_TestFun_Pro(){
        cout<<"Call ProtectedDerived_TestFun_Pro ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri(); // access error
      //  ++priValue_;        // access error
    }

private:
    void ProtectedDerived_TestFun_Pri(){
        cout<<"Call ProtectedDerived_TestFun_Pri ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri(); // access error
      //  ++priValue_;        // access error
    }
};

class PrivateDerived:private Base
{
public:
    PrivateDerived():Base(10,20,30){}

public:
    void PrivateDerived_TestFun_Pub(){
        cout<<"Call PrivateDerived_TestFun_Pub ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri(); // access error
      //  ++priValue_;        // access error
    }

protected:
    void PrivateDerived_TestFun_Pro(){
        cout<<"Call PrivateDerived_TestFun_Pro ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
       // Base_TestFun_Pri(); // access error
       // ++priValue_;        // access error
    }

private:
    void PrivateDerived_TestFun_Pri(){
        cout<<"Call PrivateDerived_TestFun_Pri ..."<<endl;
        Base_TestFun_Pub();
        ++pubValue_ ;
        Base_TestFun_Pro();
        ++proValue_;
      //  Base_TestFun_Pri(); // access error
      //  ++priValue_;        // access error
    }
};

int main(){
    return 0;
}

    通过这个测试程序,就可以很容易得出以下结论了:
    (1). private继承,基类的public,protected,private所有方法和成员变量在子类中都
变为private,子类不能访问它们;
    (2). protected继承,基类的protected和public方法变为子类的protected,子类可以访
问它们,但是不能访问private方法和  成员变量;
    (3). public继承,子类可以访问基类的任何方法和成员变量.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值