这是来自http://www.learncpp.com/cpp-tutorial/92-overloading-the-arithmetic-operators/的一些代码
我一直在研究几个自学网站和浏览论坛的操作员超载。我问了一个关于使用不同方法重载的问题,我现在明白了。问答链接在这里当它没有被定义时,它是如何返回一个值的?
但是,这个方法有参考我不明白。我尝试过使用不同的方法来实现代码,并且发现有些方法不太复杂。
我理解这样做的方式是将类的实例作为运算符函数的参数,在运算符函数内的临时实例并使用 = 运算符返回这些值。这种方式要复杂得多,我有几个问题,为什么这甚至有效。
这些问题是在您阅读代码时提出的,但这是我的三个问题。
(问题1)Ceteris parabis,为什么我需要参数中的const关键字?我知道如果我将变量公开,但为什么如果有一个朋友类,或者如果代码写在类本身内部,我需要使用 const。
(问题2)如果我把朋友函数放在类里面,我还需要关键字“朋友”,为什么?
(问题 3)c1 和 c2 类在哪里初始化?它们有一个参考,但在返回之前没有初始化,但那是在参考之下。我认为编译时会出错。
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
//I know this assigns each
//instance to the private variable m_nCents since it's private.
// Add Cents + Cents
friend Cents operator+(const Cents &c1, const Cents &c2);
//why do we need
//to make this a friend? why can't we just put it inside the class and not
//use the "friend" keyword? also why do I need to make the variables public
//if i remove const from the parameters
int GetCents() { return m_nCents; }
//I know how this is used to return the
// variable stored in m_nCents, in this program it is for cout
};
// note: this function is not a member function!
Cents operator+(const Cents &c1, const Cents &c2)
//where are these references
//actually defined? I do not see c1 or c2 anywhere except in the return, but
//that is below the code that is referencing the class
{
// use the Cents constructor and operator+(int, int)
return Cents(c1.m_nCents + c2.m_nCents);
}
int main()
{
Cents cCents1(6);
Cents cCents2(8);
Cents cCentsSum = cCents1 + cCents2;
std::cout << "I have " << cCentsSum .GetCents() << " cents." << std::endl;
return 0;
}