c++ - 打印出一个对象数组 C++
问题描述
#include <iostream>
using namespace std;
class Circle
{
private:
double radius;
public:
Circle() //Constructor
{ radius = 0; }
Circle(double); //Parameterized Constructor
void setRadius(double);
double getRadius() const
{ return radius; }
double getArea() const
{ return 3.14 * radius * radius; }
};
Circle::Circle(double r)
{
radius = r;
}
void Circle::setRadius(double r)
{
radius = r;
}
int main()
{
int size = 3; //Set size of array of objects
Circle arr[size] = { Circle(1.2), Circle(2.2), Circle(5.5) }; //Array of Objects
for (int index = 0; index < size; index++)
{
cout << arr[index].Circle(); //Error: Invalid use of Circle::Circle
}
Circle b(2.8); //Instance of class
cout << b.getRadius(); //Prints out the radius of object
Circle c; //Another instance
cout << endl << c.getRadius(); //Another radius
double r; //Variable to store the radius based on user input
cout << "\nEnter a radius: ";
cin >> r;
c.setRadius(r); //Pass user input into radius member function
cout << c.getRadius(); //Print new radius of object c
cout << endl << c.getArea(); //Prints area of object c.
return 0;
}
我试图弄清楚如何使用类参数化构造函数打印出上述对象数组的值(它应该打印出每个 Circle 对象的半径)。运行程序时,我得到的错误是invalid use of Circle::Circle
.
解决方案
您需要根据需要重载该类的<<
运算符Circle
(这里您需要显示Circle
对象的半径)作为参数,您给它一个Circle
对象。
在课堂上,我添加了以下行:
friend std::ostream& operator<< (std::ostream &out, const Circle &matrix);
在类之外,它的定义如下:
std::ostream& operator<< (std::ostream& out, const Circle& matrix)
{
out << "Circle radius " << matrix.radius<<std::endl;
}
然后在主函数中,你的循环应该被修改为只给出一个Circle
像这样的对象:
for (int index = 0; index < size; index++)
{
//cout << arr[index].Circle(); //Error: Invalid use of Circle::Circle
cout << arr[index]; // no error as you defined operator <<for your Circle class
}
这是您修改的完整代码
#include <iostream>
using namespace std;
class Circle
{
private:
double radius;
public:
Circle() //Constructor
{ radius = 0; }
Circle(double); //Parameterized Constructor
void setRadius(double);
double getRadius() const
{ return radius; }
double getArea() const
{ return 3.14 * radius * radius; }
friend std::ostream& operator<< (std::ostream &out, const Circle &matrix);
};
std::ostream& operator<< (std::ostream& out, const Circle& matrix)
{
out << "Circle radius " << matrix.radius<<std::endl;
}
Circle::Circle(double r)
{
radius = r;
}
void Circle::setRadius(double r)
{
radius = r;
}
int main()
{
int size = 3; //Set size of array of objects
Circle arr[size] = { Circle(1.2), Circle(2.2), Circle(5.5) }; //Array of Objects
for (int index = 0; index < size; index++)
{
//cout << arr[index].Circle(); //Error: Invalid use of Circle::Circle
cout << arr[index]; // no error as you defined operator <<for your Circle class
}
Circle b(2.8); //Instance of class
cout << b.getRadius(); //Prints out the radius of object
Circle c; //Another instance
cout << endl << c.getRadius(); //Another radius
double r; //Variable to store the radius based on user input
cout << "\nEnter a radius: ";
cin >> r;
c.setRadius(r); //Pass user input into radius member function
cout << c.getRadius(); //Print new radius of object c
cout << endl << c.getArea(); //Prints area of object c.
return 0;
}
输出是:
Circle radius 1.2
Circle radius 2.2
Circle radius 5.5
2.8
0
Enter a radius: 5
5
78.5
推荐阅读
- r - R / Rstudio中没有TRUE FALSE的前3个盒子
- arrays - Angular 5 - 将项目动态添加到数组
- javascript - 谷歌脚本 - 如果错误,返回 null 并移动到下一行
- detection - Transporter 是否能够检测到另一个代理?
- wordpress - WordPress - 仅当帖子数大于/等于 3 时才显示类别
- ios - iOS 可访问性:如何标记具有可通过点击更改内容的按钮?
- excel - 带有日期的 Excel VBA 的 ADO 查询问题
- python - 使用聚合连接基于重叠时间跨度的数据帧
- esp8266 - SPIFFS 更改文件中特定行的内容
- windows - 使用 PSwindowsUpdate 模块自动执行 Windows Server 更新。问题