首页 > 解决方案 > 打印出一个对象数组 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.

标签: c++arraysclassobjectparameters

解决方案


您需要根据需要重载该类的<<运算符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

推荐阅读