【发布时间】:2013-11-03 21:46:30
【问题描述】:
C++ 大师。
我正在尝试在 C++ 中实现多态性。我想编写一个带有虚函数的基类,然后在子类中重新定义该函数。然后在我的驱动程序中演示动态绑定。但我就是无法让它工作。
我知道如何在 C# 中做到这一点,所以我想我可能在我的 C++ 代码中使用 C# 的语法时犯了一些语法错误,但这些错误对我来说一点也不明显。因此,如果您能纠正我的错误,我将不胜感激。
#ifndef POLYTEST_H
#define POLYTEST_H
class polyTest
{
public:
polyTest();
virtual void type();
virtual ~polyTest();
};
#endif
#include "polyTest.h"
#include <iostream>
using namespace std;
void polyTest::type()
{
cout << "first gen";
}
#ifndef POLYCHILD_H
#define POLYCHILD_H
#include "polyTest.h"
using namespace std;
class polyChild: public polyTest
{
public:
void type();
};
#endif
#include "polyChild.h"
#include <iostream>
void polyChild::type()
{
cout << "second gen";
}
#include <iostream>
#include "polyChild.h"
#include "polyTest.h"
int main()
{
polyTest * ptr1;
polyTest * ptr2;
ptr1 = new polyTest();
ptr2 = new polyChild();
ptr1 -> type();
ptr2 -> type();
return 0;
}
我意识到我没有实现构造函数或析构函数,因为这只是一个测试类,它们不需要做任何事情,编译器会提供一个默认的构造函数/析构函数。这就是我收到编译错误的原因吗?为什么会这样?
【问题讨论】:
-
Ptr1 等待一个 polyChild,你给他一个 polyTest。你可以说这是一种父母类型,但给他一个孩子。反过来是不可能的。
-
请提供真实代码。由于各种原因,该代码不应编译。从您开始声明
polyTest默认 ctor 但您尚未定义它。 -
你没有描述你遇到的错误。 “我就是无法让它发挥作用”,这还不够好。
-
@Manu343726,你是对的,我的代码确实没有编译,你能指出这是为什么吗?我现在会发布我所有的代码
-
显示的代码包含内存泄漏! C++ 不会在你之后清理!如果您想要自动清理,请使用
std::unique_ptr<polyTest> ptr1(new PolyTest());。
标签: c++ polymorphism virtual-functions