我是 cpp 的新手,到目前为止我有以下内容:
形状 hpp:
class Shape
{
public:
Shape(int x, int y);
~Shape();
virtual void area();
bool positive(int x, y);
private:
int x;
int y;
};
形状 cpp:
Shape::Shape(int x, int y)
{
x = x;
y = y;
}
bool Shape::positive(int x, int y)
{
return true;
}
方形 hpp:
class Square : public Shape
{
private:
virtual void area();
};
和方形 cpp:
#include <iostream>
using namespace std;
void Shape::area()
{
cout << "Temp" << endl;
}
我正在尝试像这样从 Main 调用代码:
Square sq;
sq.area();
这是行不通的,我知道我遗漏了一些与 Square 类的构造函数有关的东西,但是我不确定继承在 cpp 中是如何工作的,并且正在努力理解它。
通过更正示例进行解释将非常有用或链接到一个好的教程。
谢谢
最佳答案
您在 Shape.cpp 中定义 Shape::area
而不是 Square::area
。替换:void Shape::area()
为 void Square::area()
。
此外,您正在尝试使用默认构造函数实例化一个 Square
对象,即使它没有。使用:
Square sq(a, b);
相反,或者定义一个。
尽量避免using namespace std
并习惯于std::
前缀。以后会有用的。
最后,我没有看到 virtual void Shape::area()
的任何定义。您可能打算声明它纯虚拟:
virtual void area() = 0;
关于这一点,Shape
的析构函数应该声明为虚拟的:
virtual ~Shape();
如果您打算以多态方式使用该类。
您还没有为 Square
定义构造函数,这是必需的,因为默认构造函数不再可行(因为 Shape
中没有可用构造函数)。只需像这样定义一个:
class Square {
public:
Square(int x, int y) : Shape(x, y) {}
// ...
};
上述构造函数将子对象 Shape
的构造委托(delegate)给适当的构造函数。
更不用说在:
Shape::Shape(int x, int y)
{
x = x;
y = y;
}
您正在隐藏成员对象x
和y
。你的意思可能是:
Shape::Shape(int x, int y)
{
this->x = x;
this->y = y;
}
关于c++ - 在其他类中使用抽象类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285286/