haf.freeze.100 Ответов: 1

Использование cin с вектором и классом


Каковы наилучшие способы использования cin с классом, использующим функцию vector.push_back?
Я знаю, что если это нормальный вектор, то я могу сделать это так, а затем использовать сторожевой код, чтобы подсказать конец
int myint;
vector<int> y;
cout << "vector integer" << endl;
while ((cin >> myint) && myint != 9999)
    y.push_back(myint);
for (int i = 0; i < y.size(); i++)
    cout << "y = " << y[i] << endl;*

Вот мой код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

class Account{
protected:
    int accno;
    double balance;
public:
    Account(int accno, double balance) : accno(accno), balance(balance){};
    double getBalance() {return balance;}
    void setBalance(double balance){ this->balance=balance; }
    int getAccno() {return accno;}
    void setAccno(int accno){ this->accno=accno; }
    void deposit(double amount){
        balance = balance + amount;
    }
};

class Saving : public Account{
public:
    Saving () : Account(accno,balance){};
    Saving (int accno, double balance) : Account(accno,balance){};
    bool withdraw (double amount){
        if (balance < amount){
            cout << "Insufficient funds";
            return false;
        }
        else{
            balance = balance - amount;
            return true;
        }
    }
    void compute_interest(){
        balance = balance * 1.05;
    }
    void print(){
        cout << "ID: " << accno << "     balance: " << balance << endl;
    }

    friend istream& operator >>(istream& input, Saving& account){
        cout << "ID: ";
        input >> account.accno;
        cout << "balance: ";
        input >> account.balance;
        return input;
    }
    friend ostream& operator <<(ostream& output, const Saving& account){
        output << "ID: " << account.accno << "     balance: " << account.balance << endl;
    }
    //friend bool operator !=(Saving a, int b)

};

int main()
{
    Saving saving[5];
    cout << "saving array" << endl;
    for (int i = 0; i < 5; i++){
        cin >> saving[i];
        saving[i].print();
        cout << endl;
    }

    Saving myvec;
    vector<Saving> savingV;
    cout << "saving vector" << endl;

    while ((cin >> myvec) && (myvec.getAccno() != 9999)){
        int i = 0;
        savingV.push_back(myvec);
        savingV[i].print();
        cout << endl;
        i++;
    }

    return 0;
}

Как вы можете видеть в основной функции, которую я тестировал сначала с помощью массива.
В основном то, что я действительно хочу сделать, используя cin с классом(вектор, а не массив), - это продолжать вставлять значение до тех пор, пока не будет предложено Сторожевое значение, символ или строка.

& у меня все еще возникают проблемы с проектированием функций перегрузки операторов (например,! =)
Это то, что я думал сделать, перегружая оператор"!="
while ((cin >> myvec) && myvec != 9999);

Но я не знаю, можно ли это сделать.

Что я уже пробовал:

делать{
int i = 0;
cin > & gt; myvec;
savingV.push_back(омываек);
savingV[i]. print();
cout < & lt; endl;
я++;
} пока (Кин &ГТ;&ГТ; омываек и усилитель; & ((омываек.getAccno() != 9999) || (омываек.метода getbalance() != 9999)));

1 Ответов

Рейтинг:
2

Daniel Pfeffer

В принципе, у вас есть правильная идея. Вы можете либо написать "канонический" оператор != как:

bool operator !=(Saving const& lhs, Saving const& rhs)
{
    // details omitted
}

а затем объявите значение sentinel (например , Экономия sentinel(9999, -1.0)), или вы можете написать оператор, который сравнивает Экономия к int (или любой другой тип):
bool operator !=(Saving const& lhs, int rhs)
{
    // details omitted
}


Любой метод должен работать.

Обратите внимание, что если вы объявите оператор !=, это хорошая практика, чтобы также объявить оператор ==