大白菜豆腐 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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来