我是c ++的新手,并且很难对象转换。基本上,我有一个有两个整数成员的类,我想写一个成员转换函数,以便最终得到一个double。但是,每次运行程序时,我都会返回一个整数(特别是0)。这是我的工作。
来自.h
class FieldGoal
{
private:
int fieldGoals;
int attempts;
public:
FieldGoal()
{fieldGoals = attempts = 0;}
FieldGoal(int, int);
operator double();
};
.cpp
中的函数定义FieldGoal::FieldGoal(int f, int a)
{
fieldGoals = f;
attempts = a;
}
FieldGoal::operator double()
{
return fieldGoals/attempts;
}
创建对象和调用函数的程序。
int main()
{
FieldGoal myPlays(20,50);
double percentage = myPlays;
cout << percentage << endl;
return 0;
}
答案 0 :(得分:1)
原来我对转换过程感到困惑。我认为它是内置于C ++中的东西,它识别 operator double()语法并为我做转换。事实证明,我必须将int实际转换为函数中的双精度然后返回它。
我不确定以这种方式转换对象数据类型的优点是什么。希望我继续下去是有意义的。
在这里,我首先将整数除以1.0,将它们转换为双精度。
FieldGoal::operator double()
{
return (fieldGoals/1.0)/(attempts/1.0);
}
答案 1 :(得分:0)
因此需要对您的代码进行一些修改。首先,重要的是要理解double()
不是operator
,如果你想将int转换为double,不要过度思考它!
考虑这些修订:
创建一个返回所需双精度的公共成员函数:
class FieldGoal
{
...
double my_function(); // <----
};
投射你的结果,并确保它返回一个双倍的结果:
double FieldGoal::my_function()
{
return (double) fieldGoals/attempts; // <----
}
确定在分配双倍时调用您的功能:
int main()
{
FieldGoal myPlays(20,50);
double percentage = myPlays.my_function(); // <----
cout << percentage << endl;
return 0;
}