【问题标题】:Calling original inherited function after overriding it覆盖后调用原始继承函数
【发布时间】:2013-06-01 16:45:34
【问题描述】:

我正在尝试修改从基类继承的类的私有成员。问题是在派生类中,我重写了设置私有成员的方法。在下面的代码中,我想使用重写的方法 setTime 修改 _a._time 和 b._time。

基类

class timeClass
{
    public:
        void setTime(double time){ _time = time;}
        double getTime(){ return _time;}
    private:
        double _time;
}

继承类 1

class a : public timeClass
{
    public:
        void doStuff(){ }
    private:
        double things;
}

继承类 2

class bClass : public timeClass
{
    public:
        void setTime(double time)
        {
           _time = time; //can't access _time since its private
           _a.setTime = time;
        }
    private:
        aClass _a;
}

我正在尝试做的事情可能吗?谢谢。

【问题讨论】:

    标签: c++ class inheritance overriding private


    【解决方案1】:

    你应该这样做:

    void setTime(double time)
    {
       timeClass::set_time(_time);
    // ^^^^^^^^^^^
    // Will invoke the base class's set_time() function
    
       _a.setTime(time);
    //    ^^^^^^^^^^^^^
    //    Will invoke setTime() on the `_a` subobject
    }
    

    【讨论】:

    • @dead_jake:很高兴它有帮助:)
    • 由于某种原因,当我运行 b.setTime(1.0); 时 _a._time 没有更新;我不能再发布任何代码了,但你有什么疯狂的猜测会发生什么吗?
    • @dead_jake:很难说。我建议您提出一个新问题并发布相关代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2012-05-12
    相关资源
    最近更新 更多