【问题标题】:Static Method with Same Names同名的静态方法
【发布时间】:2023-03-09 22:00:02
【问题描述】:

我一直在尝试做一个方程求解器,

这就是我的结构

Class A {
    virtual void someMethod(double time){
        // doing something here
    }
};

Class B:public A{
    virtual void someMethod(double time)
        // doing something more here
    }
};

Class C:public B{
    virtual void someMethod(double time)
        // doing something more more here
    }
};

Class D:public C{
    virtual void someMethod(double time)
        // doing something more more more here
    }
};

Class Solver {

    void static solve(A obj, double time){
      obj.someMethod(); 

    }
};

当我为 Class C 实例调用 Solver::solve 时,它​​调用为 Class A 实例定义的方法,而不是调用为 Class C 本身定义的函数。 我该如何解决?

【问题讨论】:

  • 它是同一个项目,但问题不同...... C++ 表现得很奇怪,我依靠 StackOverflow 来完成这个项目。但是我的收视率正在下降.. 真的不是一个好日子...

标签: c++ oop inheritance methods static


【解决方案1】:

问题出在你的参数上——它是一个A 类型的对象,它是用你的C 对象初始化的,而不是你通过A 引用“查看”的C 对象。与其按价值取值,不如按引用取值:

void static solve(A& obj, double time)
//                 ^

在 C++ 中,引用必须显式声明为 1,并在实际类型后加上 & 号。否则,声明的实体是一个使用相应初始化程序(在本例中为参数)初始化的对象。

【讨论】:

    【解决方案2】:

    您应该使用指针或引用,而不是对象本身,因为它切片为A 类型。当然someMethod 应该是公开的,而不是私人的,

    static void solve(A& obj, double time){
    

    【讨论】:

    • 切片?对不起,我来自非 C++ 背景,我正在将 Java 代码导入 C++
    • @MuhammadFaizan "slice C++" 非常适合谷歌搜索。
    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2013-12-30
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多