zoukankan      html  css  js  c++  java
  • 从一个小项目看return 引用 重载运算符

    #ifndef _ARRAY_H_
    #define _ARRAY_H_
      
    class Array
    {
    private:
        int mLength;
        int* mSpace;
     
    public:
        Array(int length);
        Array(const Array& obj);
        int length();
        void setData(int index, int value);
        int getData(int index);
        ~Array();
    public:
        int& operator[](int i);
        Array& operator=(Array &a);
     
    };
    #endif
    
    
    
    
    #include "iostream"
    #include "Array.h"
    using namespace std;
     
     
    Array::Array(int length)
    {
        if( length < 0 )
        {
            length = 0;
        }
         
        mLength = length;
        mSpace = new int[mLength];
    }
     
    Array::Array(const Array& obj)
    {
        mLength = obj.mLength;
         
        mSpace = new int[mLength];
         
        for(int i=0; i<mLength; i++)
        {
            mSpace[i] = obj.mSpace[i];
        }
    }
     
    int Array::length()
    {
        return mLength;
    }
     
    void Array::setData(int index, int value)
    {
        mSpace[index] = value;
    }
     
    int Array::getData(int index)
    {
        return mSpace[index];  //返回的只是一个值,没有内存地址,作不了左值,mSpace[index]本身是有内存地址的
    } Array::~Array() { mLength = -1; delete[] mSpace; } int& Array::operator[](int i) { return mSpace[i]; //正常,因为mSpace[i]本身是有内存地址的,返回一个具有内存地址的数据是可以作引用的. return this->getData(i);//这里会提示"非常量的引用初始化必须为左值, 难道this->getData(i)作不了左值?" //解答:this->getDate(i)这个函数返回的只是一个值,this->getDate(i),只是返回65行函数的类型int,没有内存地址,可能存在于除了内存区外的任何地区,所以作不了引用. //这里要确保this->getDate(i)有内存地址,所以this->getDate(i)的返回必须是引用. } Array& Array::operator=(Array &a) { mLength = a.mLength; mSpace = new int[mLength]; for (int i = 0; i < mLength; i++) { mSpace[i] = a[i]; } return *this; }      

      函数,大概只有返回一个左值引用的才可以用作左值。其它基本全为右值。

  • 相关阅读:
    [Linux]
    [Nginx]
    [Nginx]
    [Linux]
    [Linux]
    [Linux]
    [Linux]
    [Linux] -Docker修改空间大小
    [Linux]
    [MySql]
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5184615.html
Copyright © 2011-2022 走看看