我是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;
}
这是怎么了?我想学习这个程序。有人可以指导我做这个吗?我想在这里使用模板功能。
答案 0 :(得分:1)
您的代码中有很多错误。他们中的许多人看起来像错别字,但严重的错误是
在函数签名中未使用模板参数T
。这是half(tb)
无法编译的原因,因为您的half
版本始终期望int
。
不了解在构造函数student = student;
中只是为其自身分配了一个变量。您可以通过在类变量的名称前加上this->
来确保分配了类变量(或者可以确保类变量和参数名与ammount
和{{1}一样) }。
您还可以检查赋值(在构造函数中执行的操作)与初始化(在构造函数中应执行的操作)之间的区别。
下面是您的代码的有效版本
amt