我一直试图制作方程求解器,
所以这就是我的结构
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 本身定义的函数。 我该如何解决这个问题?
答案 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,在实际类型后面加一个&符号。否则,声明的实体是使用相应的初始值设定项初始化的对象,在本例中为参数。