double操作符的重载

来源:百度知道 编辑:UC知道 时间:2024/06/02 14:53:59
#include<iostream>

using namespace std;

int gcd(int x,int y)
{
int z;
x<y?z=x:z=y;
while (1)
{
if (x%z==0&&y%z==0)
return z;
z--;
}
}
class Fraction
{
int numerator; //分子
int denominator; //分母
public:
Fraction(int n,int d);//构造函数的声明
friend operator double (Fraction& m);//double转换符的声明
};
Fraction::Fraction(int n,int d)
{
numerator=n;
denominator=d;
}

operator double(Fraction& m){
m.denominator=static_cast < double > (m.denominato);
m.numerator=static_cast < double > (m.numerator);
}
int main()
{
}
错误:
D:\CodeBlocks\WorkSpace\aa\main.cpp|24|error: `operator double(Fraction&)' must be a nonstatic member function|
D:\CodeBlocks\WorkSpace\aa\main.cpp|33|error: `ope

强制转换预算符必须是个无参的非静态成员函数,你的函数声明不对。没有办法把Fraction的成员转换成double,你是想返回分数的浮点值吧。

另外,求最大公约数可以用碾除法,百度一下。

#include<iostream>

using namespace std;

int gcd(int x,int y)
{
int z;
while ((z=x%y)!=0)
{
x=y;
y=z;
}
return y;
}

class Fraction
{
int numerator; //分子
int denominator; //分母
public:
Fraction(int n,int d);//构造函数的声明
double operator()();//double转换符的声明
};

Fraction::Fraction(int n,int d)
{
numerator=n;
denominator=d;
}

double Fraction::operator()() {
return static_cast<double>(numerator) / denominator;
}

int main()
{
return 0;
}

程序本身逻辑就有问题,numerator和denominator是你定义的两个整形变量,再怎么转化也不能存储double数据啊