weixin_48602399 2022-11-11 22:35 采纳率: 80%
浏览 46
已结题

重载插入流运算符输出对象数组的元素如何实现?

使用对象数组求长方体体积

#include<iostream>
using namespace std;

/*  求三个长方体的体积 
    成员函数:
    (1)计算体积
    (2)输出三个长方体的体积
    数据成员:
    长(length)宽(width)高(height)
*/
//定义类
class Box{
public:
    //带默认参数的构造函数
    Box(float l=10,float w=10,float h=10):length(l),width(w),height(h){}
    //功能:计算、输出
    float vol_();
    void show();
    //重载 << 操作符
    friend ostream & operator<<(ostream &out,Box &b);
private:
    float length;
    float width;
    float height;
    float vol; 
};
//计算函数的实现
float Box::vol_(){
    vol=length*width*height;
     return vol;
}
//输出函数的实现
void Box::show(){
    cout<<vol<<endl;
}
//重载函数的实现
ostream & operator<<(ostream &out,Box & b){
    out<<b.vol;
    return out;
}
int main()
{
    Box box1;
    Box box2(15,18,20);
    Box box3(16,20,26);
    cout<<box1;
    Box a[3]={box1,box2,box3};
    for(int i=0;i<3;i++){
        cout<<a[i]<<endl;
    }
    
    system("pause");
    return 0;
}

原本是一个简单的对象数组的使用,但是我自行加入了运算符重载,于是就涉及到地址与值输出的相关知识。结果显示的是地址不是值,对于对象数组,不知道应该怎么修改代码得以实现输出值的目的,希望可以得到能人指点一二(根源是基础知识不扎实,最好可以说说原理),谢谢!

  • 写回答

1条回答 默认 最新

  • bostonAlen 2022-11-11 23:24
    关注

    显示的不是地址,而是vol的值,只是你这里没有初始化vol。
    而且这里你实现了vol_()函数,class中就没有必要有vol成员了,因为本来vol就是体积,不是你类的属性,你的类属性就只有长宽高,只是你可以提供计算体积的方法。
    另外,你重载了输出运算符,就不用show方法了吧。
    仅供参考:

    #include<iostream>
    using namespace std;
    
    /*  求三个长方体的体积
        成员函数:
        (1)计算体积
        (2)输出三个长方体的体积
        数据成员:
        长(length)宽(width)高(height)
    */
    //定义类
    class Box {
    public:
        //带默认参数的构造函数
        Box(float l = 10, float w = 10, float h = 10) :length(l), width(w), height(h) { }
        //功能:计算、输出
        float vol_();
        //void show();
        //重载 << 操作符
        friend ostream & operator<<(ostream &out, Box &b);
    private:
        float length;
        float width;
        float height;
    };
    //计算函数的实现
    float Box::vol_() {
        return length * width*height;
    }
    //输出函数的实现 可去掉
    /*
    void Box::show() {
        cout << vol_() << endl;
    }*/
    //重载函数的实现
    ostream & operator<<(ostream &out, Box & b) {
        out << b.vol_();
        return out;
    }
    int main()
    {
        Box box1;
        Box box2(15, 18, 20);
        Box box3(16, 20, 26);
        cout << box1 <<endl;
        Box a[3] = { box1,box2,box3 };
        for (int i = 0; i < 3; i++) {
            cout << a[i] << endl;
        }
    
        system("pause");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月19日
  • 已采纳回答 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题