具有相同名称的静态方法

Static Method with Same Names

本文关键字:静态方法      更新时间:2023-10-16

我一直在尝试制作一个方程求解器

这就是我的结构

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(); 
    }
};

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

问题在于您的参数-它是一个类型为A的对象,是用C-对象初始化的,而不是通过A-引用"查看"的C对象。不按价值取值,而按参考取值:

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

在C++中,引用必须显式声明为"1",在实际类型后面加上"与"。否则,声明的实体是一个使用相应的初始值设定项初始化的对象,在本例中为参数。

您应该使用指针或引用,而不是对象本身,因为它属于A类型。当然,someMethod应该在公共区域,而不是在私人区域,

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