Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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++,它是一个赋值运算符,用于将rhs对象中的值赋值给当前(this)。但是,它还没有实现。它是一个赋值运算符,用于将rhs对象中的值赋值给当前(this)。但是,它尚未实现。这是一个赋值运算符,因此您可以编写: CSmth & CSmth::operator = (const CSmth & rhs) { return *this; } 实际执行除了返回对第一个增编的引用之外,没有任何用处。更标准的实施方式是: CSmth a; CSmth b; a = b; 这是一个赋

它是一个赋值运算符,用于将
rhs
对象中的值赋值给当前(
this
)。但是,它还没有实现。

它是一个赋值运算符,用于将
rhs
对象中的值赋值给当前(
this
)。但是,它尚未实现。

这是一个赋值运算符,因此您可以编写:

CSmth & CSmth::operator = (const CSmth & rhs)
{
    return *this;
}
实际执行除了返回对第一个增编的引用之外,没有任何用处。更标准的实施方式是:

CSmth a;
CSmth b;
a = b;

这是一个赋值运算符,因此您可以编写:

CSmth & CSmth::operator = (const CSmth & rhs)
{
    return *this;
}
实际执行除了返回对第一个增编的引用之外,没有任何用处。更标准的实施方式是:

CSmth a;
CSmth b;
a = b;

运算符=是“复制分配运算符”。你看到什么时候

CSmth & CSmth::operator = (const CSmth & rhs) {
    if (this != &rhs) // protect against invalid self-assignment
    {
        do_whatever_required_to_copy_rsh_on_to_this;
    }
    return *this;
}
在最简单的情况下,实际发生的情况如下:

A a, b;
a = b;
要分解这一点:

  • 运算符=是a的成员。运算符可以访问调用运算符的对象中的所有变量,即左侧变量
  • 运算符=将对另一个a(赋值的右侧)的引用作为参数。良好的编码实践表明,您只能从该功能中访问rhs的公共接口**
  • operator=返回对a的引用,按照惯例,a位于赋值的左侧,或
    *此
    。这个返回很重要,因为它允许您像这样链接分配:
    A、b、c、d;a=b=c=d
调用operator=应将右侧对象的状态“复制”到左侧对象中。因为它看起来像是在做一个赋值,所以它被称为“复制赋值运算符”


**将变量表示为“private”会使该变量对该类而不是对象是私有的。您可以从copy assignment操作符中完全访问传递对象的私有实现,但这不是一个好主意,因为它违反了对象封装等内容。

操作符=是“copy Assignent操作符”。你看到什么时候

CSmth & CSmth::operator = (const CSmth & rhs) {
    if (this != &rhs) // protect against invalid self-assignment
    {
        do_whatever_required_to_copy_rsh_on_to_this;
    }
    return *this;
}
在最简单的情况下,实际发生的情况如下:

A a, b;
a = b;
要分解这一点:

  • 运算符=是a的成员。运算符可以访问调用运算符的对象中的所有变量,即左侧变量
  • 运算符=将对另一个a(赋值的右侧)的引用作为参数。良好的编码实践表明,您只能从该功能中访问rhs的公共接口**
  • operator=返回对a的引用,按照惯例,a位于赋值的左侧,或
    *此
    。这个返回很重要,因为它允许您像这样链接分配:
    A、b、c、d;a=b=c=d
调用operator=应将右侧对象的状态“复制”到左侧对象中。因为它看起来像是在做一个赋值,所以它被称为“复制赋值运算符”


**将变量表示为“private”会使该变量对该类而不是对象是私有的。您可以从copy assignment操作符中完全访问所传递对象的私有实现,但这不是一个好主意,因为它违反了对象封装等内容。

您是否有密码,这意味着它可能是错误的代码。如果你有成员要复制,这个函数应该做得更多。如果你不知道,这个函数就不应该存在。我是面向c语言的,需要尽快理解非托管代码中的几行。@GMan:我所能想到的就是一个Borg模式对象(所以没有什么可复制的),它的引用成员是共享状态(所以没有默认的复制赋值操作符)。如果他是发问者见过的第一个作业操作员,那就太倒霉了。反馈太多了。。stackoverflow是一个非常好的地方。。。谢谢大家…你有没有密码?这意味着可能是坏代码。如果你有成员要复制,这个函数应该做得更多。如果你不知道,这个函数就不应该存在。我是面向c语言的,需要尽快理解非托管代码中的几行。@GMan:我所能想到的就是一个Borg模式对象(所以没有什么可复制的),它的引用成员是共享状态(所以没有默认的复制赋值操作符)。如果他是发问者见过的第一个作业操作员,那就太倒霉了。反馈太多了。。stackoverflow是一个非常好的地方。。。感谢大家。当按Enter键(新行)时,它会在未完成时发布评论。:)按Enter键(新行)时,它会在未完成时发布注释。:)我不同意你的**脚注,因为我们谈论的是同一个类,
A
。如果你不能假设
A类
的赋值操作符知道如何处理
A类
私人成员,那么你能假设什么?我不同意你的**脚注,因为我们谈论的是同一类,
A
。如果您不能假设
A类
的赋值运算符知道如何处理
A类
私人成员,那么您可以假设什么?