c ++:将指针传递给基类时访问派生类方法?
Posted
技术标签:
【中文标题】c ++:将指针传递给基类时访问派生类方法?【英文标题】:c++: access derived class method when passing a pointer to the base class? 【发布时间】:2014-05-14 08:39:21 【问题描述】:我为这个小白问题道歉,但我刚刚开始使用面向对象的范例编程。
我有一个函数,它接受一个指向类 void foo(myClass* C)
的指针,而这个类有它自己的方法
class myClass
public:
double fooMethod();
/* ... */
现在我想将一个带有重载方法fooMethod
的对象传递给foo
,所以我想创建一个派生类
class myDerivedClass : public myClass
public:
double fooMethod(); // overloaded method
/* ... */
问题是,如果我实例化一个对象myDerivedClass* D = new myDerivedClass
并将它传递给foo(D)
,这个函数将使用基类的方法,即myClass::fooMethod()
,而我希望它使用myDerivedClass::fooMethod()
。
我该如何做到这一点?我有这个问题,因为我不想重写已经工作的代码,比如foo
或myClass
,但我想使我的新功能适应当前的代码结构。
非常感谢! L.
【问题讨论】:
你必须声明你的方法是虚拟的。 @Kiroxas 你的意思是在基类中还是在派生类中?还是两者兼而有之? 在基类中,派生类默认继承,但也可以添加。 【参考方案1】:你可以这样做
class myClass
public:
virtual double fooMethod();
/* ... */
class myDerivedClass : public myClass
public:
double fooMethod() override; // override method, not overload
/* ... */
那么如果你传递一个myDerivedClass
对象指针/引用,并用它来调用fooMethod()
,myDerivedClass
中的overriden
方法就会被调用。
概念是你可以override基类方法,而不是overload。
【讨论】:
谢谢!那是解释性的! @Barmaley.exe【参考方案2】:在面向对象编程中,为了在调用基类方法时执行派生类方法,您需要该方法为virtual
。在某些语言(如 Java)中,默认情况下所有方法都是虚拟的,但在 C++ 中,您必须在基类的方法定义中手动添加关键字 virtual
,如下所示:
class myClass
public:
virtual double fooMethod();
/* ... */
【讨论】:
以上是关于c ++:将指针传递给基类时访问派生类方法?的主要内容,如果未能解决你的问题,请参考以下文章