C++-C++函数内定义静态成员

发布于 2017-02-11 11:35:23 字数 1432 浏览 1047 评论 4

请看下面一段C++代码:

#include <iostream>
using namespace std;

//自定义一个类
class RationalNumber
{
public:
RationalNumber(int numerator = 0,int denominator = 1)
:n(numerator),d(denominator)
{
}

private:
int n,d;
friend RationalNumber& operator*(const RationalNumber& lhs,
const RationalNumber& rhs);
friend bool operator==(const RationalNumber& lhs,
const RationalNumber& rhs);
};

//定义*操作符
RationalNumber& operator*(const RationalNumber& lhs,
const RationalNumber& rhs)
{
static RationalNumber result;;
result = RationalNumber(lhs.n * rhs.n,lhs.d * rhs.d);
return result;
}

//定义==操作符
bool operator==(const RationalNumber& lhs,
const RationalNumber& rhs)
{
if (lhs.n == rhs.n && lhs.d == rhs.d)
{
return true;
}
else
return false;
}

int main()
{
RationalNumber a(1,1),b(2,3),c(4,5);
if (a * b == a * c)
{
cout << "Equal" << endl;
}
else
cout << "Not equal" << endl;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浮生未歇 2017-09-19 01:08:59

参考《Effective C++》条款23: 必须返回一个对象时不要试图返回一个引用.

清晨说ぺ晚安 2017-04-19 04:42:01

添加打印测试:
RationalNumber& operator*(const RationalNumber& lhs,
const RationalNumber& rhs)
{
static RationalNumber result;;
result = RationalNumber(lhs.n * rhs.n,lhs.d * rhs.d);

printf("%d,%dn", result.n, result.d);

return result;
}

//定义==操作符
bool operator==(const RationalNumber& lhs,
const RationalNumber& rhs)
{
printf("%d,%d / %d,%dn", lhs.n, lhs.d, rhs.n, rhs.d);
if (lhs.n == rhs.n && lhs.d == rhs.d)
{
return true;
}
else
return false;
}

输出结果为:
4,5
2,3
2,3 / 2,3
Equal
可知在if判断中,先计算右边的(a * c),将结果返回给一个静态变量(临时的)。然后计算左边的(a * b),返回的结果又写到之前的临时静态变量。最后将两个结果比较(其实是对个值进行比较),结果相等。
以上纯属猜测,需要资料考证。

浮生未歇 2017-03-16 20:51:49

operator*必须返回对象(或者对象右值),返回引用会有各种各样的问题。

清晨说ぺ晚安 2017-02-11 21:00:52

a*b 返回对 static RationalNumber result 的引用
a*c 返回的 也是对 static RationalNumber result 引用。
该实例与自身相比,因此相等。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文