返回值与返回引用、运算符重载

总结:

1、此代码主要用途是创建可存放数据的容器

2、此代码存放数据主要运用运算符重载的原理(对[ ]的的重载),以及返回引用使其可存数据

3、通过对<<的重载,使其能输出对象,通过返回引用,使其可以连续输出对象

返回值与返回引用区别:

1、返回值为引用型( & )的时候,返回的是地址,即返回它本身。

2、返回值不是引用型的时候,返回的是一个数值,而且是一个临时数值,函数运行完就不存在了。

#include <iostream>

using namespace std;

class Array
{
    friend std::ostream& operator<<(std::ostream& o,const Array &a);
    //friend void operator<<(std::ostream& o,const Array &a);
    const int size;
    double* pdata;
public:
    Array(int s):size(s)
    {
        pdata = new double[s];
    }//构造函数
    Array(const Array&b):size(b.size)
    {
        pdata = new double[size];
        for(int i=0; i<size; i++)
        {
            pdata[i] = b.pdata[i];
        }
    }//复制函数
    ~Array()
    {
        delete[]pdata;
    }//析构函数
    int getsize()
    {
        return size;
    }
    /*void setdata(int i,double v)
    {
        pdata[i] = v;
    }存数据可用double& operator[](int i)const替代*/
    /*double getdata(int i)
    {
        return pdata[i];
    }取数据可用double operator[](int i)const或者double& operator[](int i)const替代*/
    /*double operator[](int i)const
    {
        return pdata[i];
    }[]的重载使其有取数据功能,与double& operator[](int i)const函数的区别在于返回值和返回引用的区别*/
    double& operator[](int i)const
    {
        return pdata[i];
    }//可以存取数据,运用返回引用的知识
};
/*void operator<<(std::ostream& o,const Array &a)
    {
        for(int i=0;i<a.getsize();i++)
        {
            o<<a[i]<<' ';
        }
        o<<endl;
    }对<<进行重载,使其可以输出对象,但一次只能输出一个对象,即不能cout<<a1<<a2;*/
std::ostream& operator<<(std::ostream& o,const Array &a)
{
    for(int i=0; i<a.size; i++)
    {
        o<<a[i]<<' ';
    }
    o<<std::endl;
    return o;
}//对<<进行重载,使其可以输出对象,因是返回引用会返回o本身,故可以连续输出对象,即cout<<a1<<a2是正确的

int main()
{
    Array a1(10);
    Array a2(10);
    for(int i=0; i<a1.getsize(); i++)
    {
        //a1.setdata(i,i+1.5);
        a1[i]=i+1.5;
    }
    for(int i=0; i<a2.getsize(); i++)
    {
        //a1.setdata(i,i+1.5);
        a2[i]=i+2.5;
    }
    //cout<<a1.getdata(0);
    std::cout<<a1[5]<<std::endl;
    std::cout<<a1;
    std::cout<<a1<<a2;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值