【发布时间】:2015-04-07 18:08:36
【问题描述】:
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
// Overload cCents + int
friend Cents operator+(const Cents &cCents, int nCents);
int GetCents() { return m_nCents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
int main()
{
Cents c1 = Cents(4) + 6;
std::cout << "I have " << c1.GetCents() << " cents." << std::endl;
return 0;
}
我不清楚如何表达
Cents(4)+6
排队
Cents c1 = Cents(4) + 6;
被评估。 是的,我知道我们分别为 Cents 和 int 类型的操作数重载了运算符“+”。
据我了解,Censt(4) 是构造函数,对吗?所以当
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
被称为 cCenst 是否会成为对 Cents(4) 的引用?
从线
return Cents(cCents.m_nCents + nCents);
可以推断出 cCenst 是 Censt 类型的对象,因为我们通过成员选择运算符“。”访问 m_nCents。但是 Censt(4) 是一个构造函数,而不是一个类对象。
对我来说,cCenst 引用 Cents(4) 似乎没有意义,因为它们并不等同。
【问题讨论】:
-
您应该减少此处的标签数量并将 c++ 标签应用于您的问题(如果这是 c++)。
-
我看不出这个问题与运算符重载有什么关系。你为什么不能把它摆出来,因为它与某个任意函数
void foo(const Cents&)相关,用法示例是foo(Cents(4))? -
是的,我必须承认我的示例与运算符重载无关,而是通过引用将类对象传递给函数。然而,我不会编辑代码并删除运算符重载的东西,因为我想不出一个有意义的例子。但是考虑到您的明智言论,我将更改问题标题。
-
@MaxGreen:谢谢;现在好多了。
标签: c++ object constructor instantiation objectinstantiation