2013-09-04 3 views
-3

Как я узнал на этой неделе, перегружая стандартные операторы класса, мы можем использовать интуицию пользователей этого класса. Перегружая оператор, мы действительно меняем способ использования компилятором оператора на основе его аргументов.Кто может помочь мне понять этот проект программирования на C++?

Вот мой проект на этой неделе:

Создать программу на C++ с использованием Visual Studio, где вы проектируете класс «PhoneCall», который содержит номер телефона, к которому вызов помещается, длина вызова в минут и тарифа за минуту. Операторы извлечения и вставки перегрузки для класса. В этой программе перегрузите оператор ==, чтобы сравнить два PhoneCalls. Подумайте, что один PhoneCall будет равен другому, если оба вызова помещаются на один и тот же номер. Кроме того, создайте функцию main(), которая позволит вам ввести десять PhoneCalls в массив. Если 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; 
} 
+1

какие ошибки вы получаете? –

+1

Microsoft Virtual Studio? :) –

+2

«Я продолжаю получать сообщения об ошибках» абсолютно бессмыслен, если вы не включите эти сообщения об ошибках. У вас есть эта информация прямо перед вами; нет никакого оправдания, если вы не включите его в свой вопрос. Пожалуйста, отредактируйте это и укажите, какие строки вызывают ошибки. В том числе это делает ваш вопрос ясным, и вы просите нас о бесплатной помощи в решении вашей проблемы; пожалуйста, по крайней мере, приложите некоторые усилия для предоставления нам информации. –

ответ

2

У вас есть много, много синтаксических ошибок в программе.

Где находится inFile?

inFile = new StreamReader("name.txt", true); 

У вас есть скобки вместо кронштейна на этой линии:

inFile = new StreamReader{"name.txt"); 

Вы побитовое ИЛИ-сравнявшись строковое значение на этой линии:

while ((inValue = inFile.ReadLine()) |= null) 

вы имели в виду != ?