【发布时间】:2012-09-15 11:52:57
【问题描述】:
所以我有这些头文件:
形状.h:
class Shape
{
public:
Shape();
virtual ~Shape();
virtual double getArea();
virtual void printDraw();
bool isLegal(Shape shape);
};
Trig.h:
class Trig : public Shape
{
public:
Trig(Point pointA, Point pointB, Point pointC);
virtual ~Trig();
virtual double getArea();//override
virtual void printDraw();//override
bool isLegal(Trig trig);//override
};
但是当我尝试实现 Trig.cpp 时,我得到了错误。 我试过了:
Trig::Trig(Point pointA, Point pointB, Point pointC) {..}
我浏览了互联网,但我似乎没有正确地进行继承。 [我的代码必须有只包含声明的头文件!...分配的要求!]
我是在 C++ 中同时使用继承和虚函数的新手 [我在 Java 中使用过继承]
关于虚函数..它们的实现与普通函数有什么不同吗? [我理解行为上的差异]。
【问题讨论】:
-
第一版
Trig::Trig(Point pointA...)对于构造函数的实现基本正确。确切的代码是什么样的,你得到了什么错误? -
如果我写:Trig::Trig(Point pointA, Point pointB, Point pointC) {..} 我得到错误:未定义对 `Shape::Shape()' 的引用
-
您的
Trig构造函数将隐式调用Shape的构造函数(默认情况下为默认构造函数),因为它派生自Shape。因此,您还必须为Shape实现至少一个构造函数。你这样做了吗? (错误消息似乎表明您没有。) -
这很可能意味着您还没有实现
Shape的一些其他功能。确保你全部实现它们(或不声明它们)。 -
请参阅stackoverflow.com/questions/1963926/… 了解有关虚拟表 (vtable) 是什么的一般答案。
标签: c++ inheritance header virtual