Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;上课?_C++_Class_Reference_Return By Reference - Fatal编程技术网

C++ 在C++;上课?

C++ 在C++;上课?,c++,class,reference,return-by-reference,C++,Class,Reference,Return By Reference,在C++中,如果我键入: int x=5; int &y=x; 然后,y将作为存储原始x的存储位置的别名,这可以通过打印x和y的存储位置来验证/测试 类似程序的输出如下: x is at location: 0x23fe14 y is at location: 0x23fe14 但是课程怎么办 当成员函数以返回类型作为引用声明,并且函数使用此指针时,函数实际返回的是什么 例如: #include <iostream> class simple { int data

C++
中,如果我键入:

int x=5;
int &y=x;
然后,
y
将作为存储原始
x
的存储位置的别名,这可以通过打印
x
y
的存储位置来验证/测试

类似程序的输出如下:

x is at location: 0x23fe14
y is at location: 0x23fe14
但是课程怎么办

当成员函数以返回类型作为引用声明,并且函数使用
指针时,函数实际返回的是什么

例如:

#include <iostream>
class simple
{
    int data;
public:
    // ctor
    simple():
        data(0)
        {}

    // getter function
    int& getter_data()
    {   return this->data;    }

    // modifier functions
    simple& add(int x=5)
    {   this->data += x;
        return *this;
    }
    simple& sub(int x=5)
    {   this->data -= x;
        return *this;
    }
};

int main()
{   simple obj;
    obj.add().sub(4);  ////////// how & why is it working? /////////
    std::cout<<obj.getter_data();
    getchar();
}
#包括
简单类
{
int数据;
公众:
//执行器
简单()
数据(0)
{}
//吸气剂函数
int&getter_data()
{返回此->数据;}
//修饰函数
简单和添加(int x=5)
{此->数据+=x;
归还*这个;
}
简单和子(整数x=5)
{this->data-=x;
归还*这个;
}
};
int main()
{简单obj;
obj.add().sub(4);//它是如何工作的以及为什么工作的/////////

std::cout当您的成员函数返回用
*this
初始化的
简单&
*this
简单
的实例)时,语义与您自己的“引用示例”相同;引用用该类型的实例初始化

您正在用对象本身初始化返回的引用


以下代码段在语义上是等效的:

obj.add ().sub (4);


当您的成员函数返回用
*this
初始化的
简单&
*this
简单
的实例)时,语义与您自己的“引用示例”相同;引用用该类型的实例初始化

您正在用对象本身初始化返回的引用


以下代码段在语义上是等效的:

obj.add ().sub (4);


当您的成员函数返回用
*this
初始化的
简单&
*this
简单
的实例)时,语义与您自己的“引用示例”相同;引用用该类型的实例初始化

您正在用对象本身初始化返回的引用


以下代码段在语义上是等效的:

obj.add ().sub (4);


当您的成员函数返回用
*this
初始化的
简单&
*this
简单
的实例)时,语义与您自己的“引用示例”相同;引用用该类型的实例初始化

您正在用对象本身初始化返回的引用


以下代码段在语义上是等效的:

obj.add ().sub (4);

obj.add()返回到sub()的是哪种数据

obj.add()
正在返回对
obj
实例的引用

“返回
sub()
”文本毫无意义

然而,在您的例子中,对对象的引用非常类似于指向对象的普通指针,并且通常是一个好的metapher

obj.add()返回到sub()的是哪种数据

obj.add()
正在返回对
obj
实例的引用

“返回
sub()
”文本毫无意义

然而,在您的例子中,对对象的引用非常类似于指向对象的普通指针,并且通常是一个好的metapher

obj.add()返回到sub()的是哪种数据

obj.add()
正在返回对
obj
实例的引用

“返回
sub()
”文本毫无意义

然而,在您的例子中,对对象的引用非常类似于指向对象的普通指针,并且通常是一个好的metapher

obj.add()返回到sub()的是哪种数据

obj.add()
正在返回对
obj
实例的引用

“返回
sub()
”文本毫无意义


但是,在您的情况下,对对象的引用与指向对象的普通指针非常相似,通常它是一个很好的metapher。

它是对您称为添加的对象的引用。它与内置类型完全没有区别。它是对您称为添加的对象的引用。它与内置类型没有区别完全是pes。它是对您调用的
add
对象的引用。它与内置类型没有任何区别。它是对您调用的
add
对象的引用。它与内置类型没有任何区别。因此,从地址的角度讲,您试图说的是:
obj.add();
返回同一地址的别名对象,该地址最初存储的是
obj
。我做对了吗?@zibs.shirsh是的,这是描述发生了什么的一种方法。因此,从地址的角度讲,您想说的是:
obj.add();
返回同一地址的别名对象,该地址最初存储的是
obj
。我做对了吗?@zibs.shirsh是的,这是描述发生了什么的一种方法。因此,从地址的角度讲,您想说的是:
obj.add();
返回同一地址的别名对象,该地址最初存储的是
obj
。我做对了吗?@zibs.shirsh是的,这是描述发生了什么的一种方法。因此,从地址的角度讲,您想说的是:
obj.add();
返回同一地址的别名对象,而
obj
最初存储在该地址。是否正确?@zibs.shirsh是的,这是描述发生了什么的一种方法。