返回对象一半的C ++程序

时间:2018-08-14 06:25:41

标签: c++

我是c ++的新手,正在学习它。我正在编写一个简单的程序,该程序返回对象的一半。我的代码看起来像

#include<iostream>
#include<string>
using namespace std;

template <class T>
double half(int x)
{
  double h = x / 2;
  return h;
}

class TuitionBill
{
   friend ostream& operator+(ostream, TuitionBill);
   private:
      string student;
      double amount;
   public:
      TuitionBill(string, double);
      double operator/(int);
};

TuitionBill::TuitionBill(string student, double amt)
{
   student = student;
   amount = amt;
}

double TuitionBill::operator+(int factor)
{
   double half = amount / factor;
   return half;
}

ostream& operator+(ostream& o, TuitionBill& t)
{
   o << t.student << "  Tuition: $" << t.amount << endl;
   return o;
}

int main()
{
   int a = 47;
   double b = 39.25;
   TuitionBill tb("Smith", 4000.00);
   cout << "Half of " << a << " is " << half(a) << endl;
   cout << "Half of " << b << " is " << half(b) << endl;
   cout << "Half of " << tb << " is " << half(tb) << endl;
   return 0;
}

这是怎么了?我想学习这个程序。有人可以指导我做这个吗?我想在这里使用模板功能。

1 个答案:

答案 0 :(得分:1)

您的代码中有很多错误。他们中的许多人看起来像错别字,但严重的错误是

在函数签名中未使用模板参数T。这是half(tb)无法编译的原因,因为您的half版本始终期望int

不了解在构造函数student = student;中只是为其自身分配了一个变量。您可以通过在类变量的名称前加上this->来确保分配了类变量(或者可以确保类变量和参数名与ammount和{{1}一样) }。

您还可以检查赋值(在构造函数中执行的操作)与初始化(在构造函数中应执行的操作)之间的区别。

下面是您的代码的有效版本

amt