对象转换c ++; int's加倍

时间:2015-12-02 04:50:06

标签: c++ data-conversion

我是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;
}

2 个答案:

答案 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;
}