【发布时间】:2015-05-03 06:32:52
【问题描述】:
我想在评估对象时打印我的对象的 id(我的主函数中的第三行“one = two; 应该输出“Object id: 2”)。我知道赋值运算符只被调用对于左值,永远不会调用自身的对话运算符,我不想使用函数调用运算符。
任何想法如何做到这一点,我必须重载哪个运算符?
P.S.:请忽略代码的任何理智,我只关心识别正确的重载运算符。
#include <iostream>
class Object
{
public:
Object( int id ) : id_( id )
{
}
//Assignment operator only invoked for lvalue
Object& operator= (const Object& other)
{
std::cout << "Object id: " << id_ << std::endl;
return *this;
}
//Conversion operator to itself will never be called
operator Object() const
{
return *(this);
}
//Function call operator - not what I mean
Object operator()()
{
std::cout << "Object id: " << id_ << std::endl;
return *(this);
}
private:
int id_;
};
int main()
{
Object one(1);
Object two(2);
one = two;
one = two();
return 0;
}
【问题讨论】:
-
如果你想让赋值运算符打印其他人的 id,就这样做。不过,您要达到的目标还不是很清楚。
-
@Mat 我认为问题在于对方的
id_没有getter,而且它是一个私有成员变量。 -
@PatrickRoberts:这不是问题。
-
@PatrickRoberts:是的,它是同一类。
-
@Christian:您是否正在寻找声明
one;以打印Object id: 1\n?
标签: c++