正如我本周学习的那样,通过在一个类上重载标准运算符,我们可以利用该类用户的直觉。通过重载一个运算符,我们实际上改变了编译器根据其参数使用运算符的方式。
这是我本周的项目:
使用 Visual Studio 创建一个 C++ 程序,您可以在其中设计一个“PhoneCall”类,该类包含一个电话号码,通话时长(以分钟为单位)以及每分钟的费率。重载类的提取和插入运算符。在这个程序中,重载 == 运算符来比较两个电话呼叫。如果两个电话都拨到同一个号码,则认为一个电话呼叫等于另一个电话呼叫。此外,创建一个 main() 函数,允许您将十个电话呼叫输入到一个数组中。如果已向某个号码发出 PhoneCall,则不允许对同一号码进行第二次 PhoneCall。将文件另存为 PhoneCall.cpp。
使用 Visual Studio 编译此应用程序并运行它以确保它没有错误。
以下是我到目前为止的代码:
#include <iostream>
#include <string>
using namespace std;
class PhoneCall {
private:
string phonenumber;
double perminuterate;
double calldurationminutes;
public:
bool operator==( const PhoneCall &n ) const;
friend ostream & operator<<( ostream &f, const PhoneCall &n );
friend istream & operator>>( istream &f, PhoneCall &n );
};
bool PhoneCall::operator==( const PhoneCall &n ) const {
return phonenumber == n.phonenumber;
};
ostream & operator<<( ostream &f, const PhoneCall &n ) {
f << "Phone number: " << n.phonenumber <<
", Duration: " << n.calldurationminutes <<
" minutes, Rate: " << n.perminuterate << endl;
return f;
}
istream & operator>>( istream &f, PhoneCall &n ) {
f >> n.phonenumber;
f >> n.calldurationminutes;
f >> n.perminuterate;
return f;
}
int main( ) {
PhoneCall a[10];
cout << "Enter 10 phone numbers, duration in minutes, and the per-minute rates." <<
endl << "Separate each with a space and then hit enter to complete it." << endl;
for ( int i= 0; i < 10; ) {
cin >> a[i];
int j;
for ( j= 0; j < i; ++j )
if ( a[i] == a[j] ) {
cout << "Duplicate number information ignored. Try again." << endl;
break;
}
if ( j == i ) ++i;
}
for ( int i= 0; i < 10; ++i )
cout << a[i];
system("pause");
return 0;
}