C++:类继承 private, protected的区别

先看实例:

#include <iostream>
class Mammal
{
public:
    // constructors
    Mammal():itsAge(2), itsWeight(5){}
    ~Mammal(){}
protected:
    int itsAge;
    int itsWeight;
};

class Dog: public Mammal
{
public
    // constructors
    Dog():itsBreed(1){}
    ~Dog(){}

    // Other methods
    void WagTail(){
        std::cout<<"Tail wagging...\n";
        std::cout<<itsAge<<std:endl;
    }
private:
    int itsBreed;
}

int main()
{
    Dog fido;
    fido.WagTail();
    return 0;
}

在WagTail()函数中,我们直接访问了protected变量itsAge
假如我们在定义Mammal类时,将itsAge设置为private时,在WagTail中引用itsAge,程序将报错
这个例子说明:
protected的数据成员和函数对派生的类是完全可见的,而private,对派生类是不可见的。其他方面与private一样。

备注:以下结论没有经过验证,记录在此,仅供自己理解

以Linux的文件权限的概念来说明:由于没有x概念,因此只涉及r, w概念
假如:hello.cpp文件为例
publicrw(owner)|rw(group)|rw(others)
protected:  rw|rw|--
private:    rw|--|--
因此,
当itsAge, itsWeight为protected时,WagTail()函数可以访问itsAge, itsWeight;
当itsAge, itsWeight为private时, WagTail()函数不可以访问;
而不论itsAge, itsWeight是protected还是private, main()函数都不可以访问itsAge,itsWeight,itsBreed;
即fido.itsAge // error
 fido.itsWeight // error
 fido.itsBreed //error
如果需要访问必须通过public的成员函数或变量, 比如fido.WagTail()这类函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值