C ++继承和绑定函数

时间:2018-11-30 04:50:01

标签: c++ inheritance binding

在我的C ++项目中,.h文件中有一个'Shape'类及其子类'Square':

class Shape {
    public:
    Shape();
    Shape(int, int, string);
    virtual ~Shape();

    virtual void draw();

private:
    int length, width;
    string colour;
};

class Square : public Shape {
public:
    Square(int, int, string);
    void draw();
};

在.cpp文件中,我实现了构造函数等。

Shape::Shape() : length(0), width(0) {}
Shape::Shape(int len, int wid, string col) : length(len), width(wid), colour(col) {}
Shape::~Shape() {} //destructor

virtual void Shape::draw(){};

Square::Square(int len, int wid, string col) : Shape(len, wid, col) {}
void Square::draw() {cout << "I am drawing a square" << endl;};

我试图按如下所示在主要功能中对其进行测试,只需按一个正方形即可。

int main() {

int count(0);
vector<Shape*> shapes;
shapes.push_back(new Square(10, 10, "orange"));

for (Shape* shp : shapes) {
    cout << "\nShape " << count++ << ":";
    shp->draw();
} // end for

for (Shape* shp : shapes)
    delete shp;

return 0;

}

理想情况下,输出看起来像这样:

形状0: 我正在画一个正方形

但是,输出的只是

形状0:

如果我将某些输出放入void Shape::draw(){};之类的void Shape::draw(){cout << "I am just a shape" <<endl;};中,则输出为Shape 0:我只是一个形状。

这告诉我该函数仅在Shape :: draw()函数结束,而不会被覆盖。代码确实可以正常运行,但是.cpp和.h中发生了什么,这阻止了继承? 编辑:将绘制功能声明为虚拟钉在棺材上的钉子。

0 个答案:

没有答案