我为这个引人注目的问题道歉,但我刚开始用面向对象的范式编程。
我有一个函数,它接受一个类void foo(myClass* C)
的指针,这个类有自己的方法
class myClass{
public:
double fooMethod();
/* ... */
}
现在我想使用重载方法foo
传递给fooMethod
一个对象,所以我考虑创建一个派生类
class myDerivedClass : public myClass{
public:
double fooMethod(); // overloaded method
/* ... */
}
问题是如果我实例化一个对象myDerivedClass* D = new myDerivedClass
并传递它foo(D)
,这个函数将使用基类的方法,即myClass::fooMethod()
,而我希望它使用myDerivedClass::fooMethod()
。
我该如何实现?我有这个问题,因为我不想重写已经工作的代码,比如foo
或myClass
,但是我想让我的新功能适应代码的当前结构。
非常感谢! 升。
答案 0 :(得分:1)
在面向对象的编程中,为了派生类'当你调用基类时执行方法'您需要该方法为virtual
的方法。在某些语言(如Java)中,默认情况下所有方法都是虚拟的,但在C ++中,您必须在基类的方法定义中手动添加关键字virtual
,如下所示:
class myClass{
public:
virtual double fooMethod();
/* ... */
}
答案 1 :(得分:1)
你可以这样做
class myClass{
public:
virtual double fooMethod();
/* ... */
}
class myDerivedClass : public myClass{
public:
double fooMethod() override; // override method, not overload
/* ... */
}
然后,如果您传递myDerivedClass
对象指针/引用,并使用它来调用fooMethod()
,则会调用overriden
中的myDerivedClass
方法。