c++ - 在其他类中使用抽象类的构造函数

标签 c++

我是 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;
}

您正在隐藏成员对象xy。你的意思可能是:

Shape::Shape(int x, int y)
{
    this->x = x;
    this->y = y;
}

关于c++ - 在其他类中使用抽象类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285286/

相关文章:

C# 'String' 到 C++ 'std::string'

c++ - 为什么我在添加另一个构造函数时会出现此错误?

c++ - 如何在 C++ 和 Windows 中处理我的指针?

python - 与 Arduino Edison/Galileo 的语言兼容性

c++ - C++中的流程控制构造,如何修改?

C++ filesystem 系统找不到指定的路径

c++ - 我如何在 vc6.0 中使用 Imagemagick 库?

c++ - openCV 错误 : Assertion failed (scn == 3 || scn == 4) on Raspberry Pi

c++ - 如何正确地从另一个文件调用一个函数?

c++ - 在 Ubuntu 上使用 cmake 安装 AWS SDK C++,安装第三方库时出现问题