首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中为类创建赋值(=)运算符

在C++中为类创建赋值(=)运算符
EN

Stack Overflow用户
提问于 2011-07-18 13:58:41
回答 7查看 4.3K关注 0票数 7

可能重复:

Operator overloading

编辑2

我正在使用insert(.)不对,我实际上不需要'=‘操作符。很抱歉浪费了人们的时间。我已经投票结束了..。还有2票。请投票。

编辑

我想要'=‘运算符的原因是我可以使用insert(.)函数在派生对象的向量上。目前,我的编译器说:

/usr/include/c++/4.2.1/bits/stl_algobase.h:283: error: no match for 'operator=' in '* __result = * __first'

我以前为自己的类创建了'==‘和'<’操作符,但是我很难创建'=‘操作符。我的类看起来如下(忽略愚蠢的变量名):

代码语言:javascript
复制
class Derivation {
public:
    string                  rc; 
    ImplementationChoice    Y; 
    vector<Derivation>      X;
    vector<string>          D;       
    vector<string>          C;       
    vector<Player>          P, O;   
    vector<Attack>          B;   

    // various functions
    // ...
};

我想知道我需要投入什么

代码语言:javascript
复制
// What do '=' return?  An object of the class right?
Derivation& operator=(const Derivation &d) const {
    // something....
}

非常感谢。

EN

回答 7

Stack Overflow用户

发布于 2011-07-18 14:02:28

这取决于你,真的。你需要接线员做什么?您想返回一个引用,还是要一个副本?

编辑:请注意这是修辞。使用此向量的内容将决定您是否需要引用或副本。例如,如果插入的对象在从向量中删除之前在任何时候都会超出作用域,那么您将需要一个副本。如果没有,并且希望在更改向量中的实例时实现原始对象,则需要一个引用。希望这能帮点忙。

票数 2
EN

Stack Overflow用户

发布于 2011-07-18 14:02:52

首先移除康斯特..。然后是,如果您确实需要一个复制操作符,那么执行类似的操作,并添加您自己的逻辑(这样它就不会完全按照编译器生成的复制运算符所做的那样做):

代码语言:javascript
复制
Derivation& operator=(const Derivation& other) {
    this->rc = other.rc; 
    this->Y = other.Y; 
    this->X = other.X;
    this->D = other.D;       
    this->C = other.C;       
    this->P = other.P;
    this->O = other.O;   
    this->B = other.B;
    // ...
    return *this;
}  
票数 2
EN

Stack Overflow用户

发布于 2011-07-18 14:03:09

首先,赋值运算符可能不应该是const--

第二,赋值运算符通常会将非const引用返回给被赋值的对象(*this)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6734063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档