我想在對象被評估時打印我的對象的id(我的主函數中的第三行「one = two; should output」Object id:2「)。我知道賦值操作符只被調用左值,對話運營商本身不會被調用,我不希望使用的函數調用操作對象評估時調用哪個運算符?
任何想法如何可以做到這一點,其經營者必須我超載
PS:?請忽略代碼的任何正常性,我只關心識別正確的超負荷運營商。
#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
@Mat我認爲問題在於對於其他的''id_'''沒有getter,並且它是一個私有成員變量。 –
@PatrickRoberts:這不是問題。 – Mat