C++覆盖和保护成员

1.覆盖

派生类可以定义一个和基类成员同名的成员,这叫做覆盖。在派生类中访问这样的的类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符::。

2.基类和派生类具有同名成员的情况。

class base
{
    int j;
    public:
        int i;
        void func();
};
class derived:public base
{
    public:
        int i;
        void access();
        void func();
};
void derived::access ()
{
    j=5;//error
    i=5;//引用的时派生类的i;
    base::i=5;//引用的时基类的i
    func();//派生类的
    base::func();//基类的
}
int main()
{
    derived obj
    obj.i=1;
    obj.base::i=1;
}

一般情况下,派生类定义和基类同名的变量是愚蠢的,但是定义同名的函数却可以存在。
如果定义了同名的变量,那么基类的变量会在派生类的变量的前边。

3.另一种存取权限说明符:protected(保护成员)

(1)基类的private成员:可以被以下函数访问
–基类的成员函数
–基类的友元函数
(2)基类的public成员:可以被以下函数访问
–基类的成员函数
–基类道德友元函数
–派生类的成员函数
–派生类的友元函数
–其他函数
(3)基类的protected成员:可以被以下函数访问
–基类的成员函数
–基类的与友元函数
–派生类的成员函数可以访问当前对象的基类的保护成员
举例子:

class father
{
    private:int nprivate:
        public:int npublic;
        protected:int nprotected;
};
class son:public father
{
    void accessfather(){
        npublic=1;  //ok
        nprivate=1;//wrong
        nprotected=1;//ok,访问从基类继承的protedted成员
        son f;
            f.nprotedted=1;//wrong,f不是当前对象
    }
};
int main()
{
    father f;
    son s;
        f.npublic=1;//ok
        s.npublic=1;//ok
        f.nprotedted=1;//error
        f.nprivate=1;//error
        s.nprotected=1;//error
        s.nprivate=1;//error
        return 0;
}

  今天的内容就讲到这里了! 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙星尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值