【问题标题】:Debugging a C++ code调试 C++ 代码
【发布时间】:2016-01-23 17:28:22
【问题描述】:

我无法理解以下代码 (pointer or value) 中函数返回的内容。

#include<iostream>
using namespace std;
class safearay
{
    int a[10];
public:
    int& operator [](int n)
    {
        if(n<0 || n>5 )
        {
            cout<<"Exceeded bounds"<<endl;
        }
        return a[n];
    }
};
int main()
{
    safearay sa1;
    for (int j=0;j<10;j++)
    {
        sa1[j]=j*j;
    }
    for (int j=0;j<10;j++)
    {
        int u=sa1[j];
        cout<<u<<endl;
    }
}

请解释

【问题讨论】:

标签: c++ arrays pointers return operator-overloading


【解决方案1】:
int& operator [](int n)  

返回对int的引用。
本质上,您可以将其用作int,但更改也会影响类中的a[n](因为它已返回)。它就像一个没有所有* 的指针,只是你不能更改它指向的地址。

【讨论】:

  • 以下语句是否有意义 :: 返回引用的函数被视为变量。它返回一个变量的别名,即函数返回语句中的变量。所以它可以用在赋值运算符的左边。
  • A function that returns a reference , is treated as if it were a variable. 不是函数本身被视为变量,而是它返回的内容。否则,一切都是真的。
【解决方案2】:

注意在你的代码中你这样做:

 safearay sa1;
sa1[j]=j*j;

通常您不能像这样访问对象值。您要询问的方法是运算符重载方法,它定义了对象在此类访问中执行的操作。

int& operator [](int n)
    {
        if(n<0 || n>5 )
        {
            cout<<"Exceeded bounds"<<endl<<;
        }
        return a[n];
    }

表示

返回对对象safearay中数组a第n位值的引用,如果n在 范围 返回值是通过引用传递的,因此您可以分配给它,更改将在a[i]

您可以阅读有关运算符重载的更多信息here

更多关于通过引用传递值here

【讨论】:

  • 如果它返回值那么分配是如何发生的?
  • 它返回对值的引用,意味着你可以改变它,注意int&amp;。它是 C++,您还有一个选择 - 通过引用,而不仅仅是通过指针和值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2013-01-07
  • 2017-08-13
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多