大白菜豆腐 2023-04-09 22:27 采纳率: 100%
浏览 15
已结题

关于#c++#的问题:关于运算符重载的一个问题

img


关于运算符重载的一个问题,注意返回值一个是值,一个是引用,两个有不同的区别

  • 写回答

6条回答 默认 最新

  • 关注

    模板类,大部分代码都写出来了
    double& va = arr[index]; //返回引用
    double vb = arr[index]; //返回值
    返回引用的,修改va,也会改变数组中的值。
    返回值的,修改vb,不会改变数组中的值。

    #include <iostream>
    using namespace std;
    
    template <typename T, int N >
    class Array {
        T data[N];
        int nLength;                //实际存放的元素个数
    public:
        Array() { nLength = 0; }
        int getLength() { return nLength; }            //取实际元素个数
        bool put(T value)            //将value加入data[]中
        {
            if (nLength < N)
            {
                data[nLength++] = value;
                return true;
            }
            return false;
        }
        bool set(int index, T value)  //设置某元素的值
        {
            if (index < nLength)
            {
                data[index] = value;
                return true;
            }
            return false;
        }
        bool get(int index, T& value) //获取某个元素的值,放入value中
        {
            if (index < nLength)
            {
                value = data[index];
                return true;
            }
            return false;
        }
        T& operator[] (int index)  //取某个位置元素的值,返回该值,可以与++或--联用
        {
            return data[index];
        }
        T operator[] (int index) const
        {
            T v = data[index];
            return v;
        }
        virtual ~Array() {}
    };
    
    int main()
    {
        Array<double, 10> arr;
        double v;
        cout << "请输入3个数存放如数组:" << endl;
        for (int i = 0; i < 3; i++)
        {
            cin >> v;
            arr.put(v); //调用put插入数组
        }
        cout << "当前存放的元素个数:" << arr.getLength() << endl;
    
        int index = 0;
        cout << "请输入要获取的元素下标(从0开始):";
        cin >> index;
        if (arr.get(index, v))
            cout << "该元素为:" << v << endl;
        else
            cout << index << "大于实际元素个数,获取失败!" << endl;
    
        cout << "请输入需要修改的元素下标及新值:";
        cin >> index >> v;
        if (arr.set(index, v))
            cout << "设置成功!" << endl;
        else
            cout << index << "大于实际元素个数,设置失败!" << endl;
    
        cout << "请输入要获取的元素下标(从0开始):";
        cin >> index;
        double& va = arr[index]; //返回引用
        cout << "double& va = arr["<< index << "],调用返回值为引用的重载函数,va的值为:" << va << endl; //使用[]注意不要越界
        
        va = 10; //
        cout << "设置va=10后,double vb = arr["<< index << "],调用返回值为普通类型的重载函数,vb值为:";
        double vb = arr[index];
        cout << vb;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。