使用基类函数从派生类打印

时间:2015-11-28 06:55:55

标签: c++ class derived-class

我正在尝试使用函数从派生类中使用函数从其中的基类打印,我不确定是否应该 我如何打印出Shape toString函数和Rectangle toString函数的信息。

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

class Shape
{
public:
    Shape(double w, double h);
    string toString();

private:
    double width;
    double height;

};

Shape::Shape(double w, double h)
{
    width = w;
    height = h;
}

string Shape::toString()
{
    stringstream ss;
    ss << "Width: " << width << endl;
    ss << "Height: " << height << endl;

    return ss.str();
}

class Rectangle : public Shape
{

public:
    Rectangle(double w, double h, int s);
string toString();

private:
    int sides;

};


string Rectangle::toString()
{
    //
    // Implement the Rectangle toString function
    // using the Shape toString function
    Shape::toString();
    cout << toString();
    stringstream ss;
    ss << "Sides: " << sides << endl;
    return ss.str();

}

// Use the constructor you created
// for the previous problem here
Rectangle::Rectangle(double w, double h, int s)
    :Shape(w, h)
{
    sides = s;
}

在问题中可以操作的唯一部分是评论之后的部分

1 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:

cout << toString();

因为它将以递归方式调用自身,最终会耗尽堆栈并获得运行时错误。

您的实施应该是:

string Rectangle::toString()
{
    // Implement the Rectangle toString function
    // using the Shape toString function
    stringstream ss;
    ss << Shape::toString();
    ss << "Sides: " << sides << endl;
    return ss.str();
}

在您希望多态性正常工作的情况下,还要考虑使用此方法constvirtual