C++ polymorphism
C++ polymorphism
本文关键字:polymorphism C++ 更新时间:2023-10-16
我有一个奇怪的问题,我肯定有一个简单的解决办法。我有一个超类,我们叫它"鸟"。Bird有一个叫chirp的虚拟函数,它返回0。我还有一个子类叫它SomeOtherBird。SomeOtherBird是Bird的一个子类。我的子类的chirp()函数应该返回1。
:
Bird.Chirp()应该返回0SomeOtherBird.Chirp()应该返回1
其他一些鸟是鸟的子类。
现在假设我将Bird传递给一个单独的构造函数,我们称它为nest。
:巢(Bird&x)
如果我传入一个SomeOtherBird,我调用Chirp,它调用主超类的虚函数,而不是子类的虚函数,所以例如:
SomeOtherBird x;巢(x);然后如果我执行x.chirp,则调用主方法,而不是子类中的方法。
如何在子类中调用函数,而不是虚拟主函数?
谢谢
我为我工作。
ideone.com/RRfau
你真的应该包含一些示例代码,这样我们可以帮助你。
#include <iostream>
#include <typeinfo>
class Bird
{
public:
virtual ~Bird() {}
virtual int chirp() { return 0; }
};
class SomeOtherBird : public Bird
{
public:
virtual int chirp() { return 1; }
};
void nest( Bird& x )
{
std::cout << typeid(x).name() << " says " << x.chirp() << 'n';
}
int main()
{
SomeOtherBird s;
nest( s );
Bird b;
nest( b );
}
工作正常,如下所示。也许您没有将基方法设置为虚方法。或者代码中有其他错误,因为代码没有发布,所以无法判断。
#include <iostream>
using namespace std;
class Bird
{
public:
Bird() {}
~Bird() {}
virtual int Chrip() { cout << "Bird version" << endl; return 0; }
};
class SomeOtherBird:public Bird
{
public:
SomeOtherBird() {}
~SomeOtherBird() {}
virtual int Chrip() { cout << "SomeOtherBird version" << endl; return 1; }
};
int nest(Bird &b)
{
b.Chrip();
}
int main()
{
SomeOtherBird s;
Bird &b = s;
int retcode = nest(b);
cout << "retcode " << retcode << endl;
}
输出:rhdevblade1-~/cpp: ./virt
SomeOtherBird version
retcode 1
如果没有看到您的代码,就不可能肯定地回答您。然而,这听起来像是您没有在基类中编写"virtual Bird()",而只是在派生类中编写。这行不通。
class Bird {
virtual int Bird();
};
class MoreBird : public Bird {
int Bird();
};
virtual关键字在派生类中是不需要的(尽管不把它放在那里是不好的做法,即使99.9%的程序员都很懒,不这样做)
相关文章:
- C++结合静态和动态多态性来创建"Hyper Polymorphism"?
- "Static polymorphism with Qt signal/slot: What is wrong?"
- visual c++ static polymorphism (CRTP) 在评估"静态 constexpr&
- C++:STL 类型和自定义类型的优雅"polymorphism"?
- Polymorphism , c++
- visual About MFC C++ Polymorphism
- C++: Polymorphism
- 如何使运算符过载并且不使用"Curiously Recurring Template Pattern"和"Run Time polymorphism"
- 为什么'pure polymorphism'比使用 RTTI 更可取?
- C++ polymorphism
- "True Polymorphism"的例子?(最好使用哈斯克尔)
- Polymorphism c++
- Inheritance-free polymorphism
- 使用派生类型为基类型的模板化参数调用函数时"template polymorphism"?