具有相同名称的静态方法

时间:2014-10-08 08:20:25

标签: c++ oop inheritance methods static

我一直试图制作方程求解器,

所以这就是我的结构

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

    }
};

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

2 个答案:

答案 0 :(得分:0)

您应该使用指针或引用,而不是对象本身,因为它切换为A类型。当然someMethod应该在公共部分,而不是私下,

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

答案 1 :(得分:0)

问题是您的参数 - 它是A类型的对象,使用您的C - 对象初始化,而不是通过A“查看”的C对象 - 参考。取而代之的是取值,参考:

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

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