使用基本 class 函数从派生 class 打印
Printing from a derived class with a base class function
我正在尝试使用来自派生 class 中的函数的函数打印,其中包含来自基础 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;
}
问题中唯一可以操作的部分是评论之后的部分
我认为问题出在这一行:
cout << toString();
因为它将递归调用自身,最终您将 运行 出栈并得到 运行time 错误。
您的实施应该是:
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();
}
如果您希望多态性正常工作,也可以考虑使用此方法 const
和 virtual
。
我正在尝试使用来自派生 class 中的函数的函数打印,其中包含来自基础 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;
}
问题中唯一可以操作的部分是评论之后的部分
我认为问题出在这一行:
cout << toString();
因为它将递归调用自身,最终您将 运行 出栈并得到 运行time 错误。
您的实施应该是:
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();
}
如果您希望多态性正常工作,也可以考虑使用此方法 const
和 virtual
。