Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ - Fatal编程技术网

C++ 重载运算符=在c+中+;

C++ 重载运算符=在c+中+;,c++,C++,在下面的代码中,我不知道“this”是什么(不是关键字,而是它指向什么)。“this”是指向当前对象的引用还是指针 当检查a=a赋值如果(this!=&a),为什么“this”与&a比较,而不是与a比较 类书有私有成员*num_pages,该成员指向书中的页数 Book &Book::operator=(const Book& a){ if(this!=&a){ delete num_pages; num_pages = new i

在下面的代码中,我不知道“this”是什么(不是关键字,而是它指向什么)。“this”是指向当前对象的引用还是指针

当检查a=a赋值
如果(this!=&a)
,为什么“this”与&a比较,而不是与a比较

类书有私有成员
*num_pages
,该成员指向书中的页数

Book &Book::operator=(const Book& a){
    if(this!=&a){
        delete num_pages;
        num_pages = new int;
        *num_pages = *a.num_pages;
    }
    return *this;
}

这是一个指针。它与的地址进行比较,以避免自赋值。

这是一个指针。将其与a的地址进行比较以避免自赋值。

在上面的示例中
是指向赋值运算符左侧对象的指针。例如,如果您编写下面的代码

Book b1, b2;
b1 = b2;
然后在您的操作员
=
中,这是
b1
的地址,
a
b2

为什么将此
&a
进行比较,而不是与
a
进行比较

因为
表示指向
书籍
的指针,而
a
表示对
书籍
的恒定引用。为了比较两者,它们的间接寻址级别必须相同(两者都必须是指针)。这样做是为了使有效的自我分配

b1 = b1;

不会引起问题。

在上面的示例中
这是指向赋值运算符左侧对象的指针。例如,如果您编写下面的代码

Book b1, b2;
b1 = b2;
然后在您的操作员
=
中,这是
b1
的地址,
a
b2

为什么将此
&a
进行比较,而不是与
a
进行比较

因为
表示指向
书籍
的指针,而
a
表示对
书籍
的恒定引用。为了比较两者,它们的间接寻址级别必须相同(两者都必须是指针)。这样做是为了使有效的自我分配

b1 = b1;


不会引起问题。

为什么您没有一个简单的类成员
int num\u pages而不是
int*num_页面?这只是我们在大学里演示复制构造函数和重载操作符的例子……你读的C++教程是什么,不包括这个?这只是一个愚蠢的例子,因为每个人都会合理地做我所提到的,所以整个结构归结为<代码> NUMYPAGE = A.NUMPEPAGE;归还*这个我读了一些Laslo Kraus的书,书中确实涵盖了这方面的所有内容,但我只是想100%清楚这方面的内容而不是
int*num_页面?这只是我们在大学里演示复制构造函数和重载操作符的例子……你读的C++教程是什么,不包括这个?这只是一个愚蠢的例子,因为每个人都会合理地做我所提到的,所以整个结构归结为<代码> NUMYPAGE = A.NUMPEPAGE;归还*这个
我读了Laslo Kraus的一些书,书中确实涵盖了这方面的所有内容,但我只是想100%地了解这方面的内容。也许可以帮助解释一下,我们希望
操作符=
也适用于
b1=b1,其中
this==&a
是因为
a=b1和
this=&b1`。建议:“在
操作符=
中,
this
b1
的地址,
a
b2
”(省略繁琐的“值”;更准确地说,它当然应该是“this
的值”,并且“a的值”
。@KerrekSB谢谢!这比我写的要干净得多。谢谢你,伙计。还有一件事。
Book&Book::operator=(const Book&a)中的
&
表示返回引用中的函数正确吗?因此,如果我们返回
*this
,为什么函数的类型不仅仅是指针
*
?@bliny Correct,第一个
&
表示运算符返回引用(因此
返回*this
中的星号).Return type不是一个指针,因此您可以使用类似语义的值:当您编写
b1=b2
时,您将书籍视为一个对象,而不是指针,因此语言反映了这一点。可能有助于解释我们希望
operator=
也适用于
b1=b2;
,其中
this=&a
a=b1和
this=&b1`。建议:“在
操作符=
中,
this
b1
的地址,
a
b2
”(省略繁琐的“值”;更准确地说,它当然应该是“this
的值”和“a
的值”)@KerrekSB谢谢!这比我写的要干净得多。谢谢你,伙计。还有一件事。
书中的
&
操作符=(const Book&a)
表示返回引用中的函数正确吗?因此,如果我们返回
*this
,为什么函数的类型不仅仅是指针
*
?@bliny Correct,第一个
&
表示运算符返回引用(因此
返回*this
中的星号).Return type不是指针,因此您可以使用类似语义的值:当您编写
b1=b2
时,您将书籍视为对象,而不是指针,因此语言反映了这一点。在本例中,这将导致快乐时光。在本例中,这将导致快乐时光。