即使mutator设置正确,c ++ int accessor也会返回0

时间:2012-01-16 19:06:46

标签: c++ oop getter-setter accessor mutators

我遇到了一个我觉得很愚蠢的问题,因为它基本上只是在2000行工作OOP脚本中的两行代码。

切入追逐 - 我有一个Entity类,它提供各种信息(名称,地址,ID)。问题是 - 即使ID mutator(setter)设置了一个正确的值(用cout和返回值测试),访问器总是返回0.

// ID accessor
int Entity::ID() const {
    return _ID;     
}
// ID mutator
int& Entity::ID( int newID ) {
    if ( newID >= 0 ) {
        _ID = newID;
    }
    return _ID;
}

以下是我的类(在AgencyNetwork :: createXXX()中调用ID(int)方法,并在每个toStr()方法中使用(在每个类的末尾)):

Entity.cppAgencyNetwork.cppAgent.cpp

已解决:我忘了在每个operator =中添加ID mutator。感谢所有帮助过的人:)

2 个答案:

答案 0 :(得分:4)

最值得注意的是,Entity的赋值运算符已被破坏:

Entity& Entity::operator= ( const Entity& tocopy ) {
    delete this; // <<< don't do that 

    this -> name ( tocopy.name() );
    this -> address ( tocopy.address() );
    // <<< missing _ID

    return *this;
}

答案 1 :(得分:0)

没有魔力。有简单的BUG。所以,让我们使用跟踪:跟踪每个'mutator'调用。确保没有人可以通过mutator调用以其他方式访问_ID字段。跟踪构造函数,复制构造函数,复制赋值运算符和析构函数调用。 然后运行代码并按照跟踪日志。 我相信你的一切都会变得清晰。

注意:如果您的实现错过了上面提到的某些成员函数,您应该使用仅包含跟踪器调用的主体来定义它们。

您不应让编译器生成任何隐式成员函数,以确保您完全控制您的类,特别是_ID字段。