关于继承体系下的操作符重载问题讨论(二)

    我们在上一篇的时候引入了一个问题:当不为我们的子类显式提供操作符重载函数实现,那么编译器为这个
类提供的操作符重载的默认实现版本是否会调用基类的操作符实现函数呢?带着这个问题,我们依旧利用上一篇
的代码进行测试,我们先注释掉该子类的操作符实现函数:   
    class Day:public LimitValue{
    public:
        Day(int days,int selfData):LimitValue(days),selfValue_(selfData){}
        // Day& operator=(const Day& rhs){
        //      cout<<"In Day,call operator=(const Day&) "<<endl;           
        //      selfValue_ = rhs.selfValue_;
        //      return *this;
        // }   
        int getSelfValue()const{
            return selfValue_;
        }
    private:
        int selfValue_;
    };
    测试代码我们原封不动,输出结果如下:
    // Before assign,d1:value_=1 selfValue=1
    // d2:value_=2 selfValue=2
    // In LimitValue,call operator=()
    // After assign,d1:value_=1 selfValue=1
    // d2:value_=1 selfValue=1
    wow,看来运行结果依然良好!它调用了基类的操作符实现体,显然符合我们的一般规律,呵呵,好了,我们现在
在前一篇的结论基础了在进行完善一下:
    (1)如果你显式地实现子类的操作运算符函数,那么在你的实现体内你需要实现其父类该操作的功能.因为此
时的编译器不会为你自动调用父类相应的操作符函数.
    (2)如果你没有声明子类的操作运算符函数,那么当某地方用到该类的操作符时,编译器会自动为该类生成其
默认的操作符函数实现版本,该实现版本内部会自动调用该类父类的操作符函数(当然如果父类没有提供明确声明
那么它将调用编译器父类该操作符的默认实现版本).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值