Установка строки в методе установки

Есть ли что-то, что мне нужно сделать по-другому при установке строки в методе установки? Это мой класс:

class SavingsAccount
{
public:
    void setData();
    void printAccountData();
    double accountClosure() {return (accountClosurePenaltyPercent * accountBalance);}
private:
    int accountType;
    string ownerName;
    long ssn;
    double accountClosurePenaltyPercent;
    double accountBalance;
};

void SavingsAccount::setData()
{
    cout << "Input account type: \n";
    cin >> accountType;
    cout << "Input your name: \n";
    cin >> ownerName;
    cout << "Input your Social Security Number: \n";
    cin >> ssn;
    cout << "Input your account closure penalty percent: \n";
    cin >> accountClosurePenaltyPercent;
    cout << "Input your account balance: \n";
    cin >> accountBalance;
}


int main()
{
    SavingsAccount newAccount;
    newAccount.setData();
}

person Crystal    schedule 14.11.2009    source источник
comment
@Jet — не форматируйте свой код, добавляя <br /> после каждой строки. Используйте функцию кодового блока (в верхней части окна редактирования). Исправлено сейчас.   -  person Robert Cartaino    schedule 14.11.2009
comment
Ok. Мне было интересно, есть ли что-то для этого. Я не знал, где это было!   -  person Crystal    schedule 14.11.2009


Ответы (2)


Не называйте это "установщиком" :)? Он не принимает никаких параметров и считывает данные со стандартного ввода, в то время как для сеттеров обычная семантика заключается в том, чтобы взять параметр и присвоить его соответствующим полям. Это можно назвать "readData()"

person Dmitry    schedule 14.11.2009

Получаете ли вы какие-либо ошибки в своем коде или просто спрашиваете, как лучше всего это сделать? На самом деле вы должны преобразовать связанный код в связанные с ними функции, чтобы сохранить ввод и вывод консоли в основном методе и передать данные в функцию через параметры. Но в любом случае без рефакторинга попробуйте это:

#include <sstream>
#include <iostream>

using namespace std;

class SavingsAccount
{
 public:
  void setData();
  void printAccountData();
  double accountClosure() {return (accountClosurePenaltyPercent*accountBalance);}
 private:
  int accountType;
  string ownerName;
  long ssn;
  double accountClosurePenaltyPercent;
  double accountBalance;
};

void SavingsAccount::setData()
{
 stringstream str;

 cout << "Input account type: \n";
 cin >> str;
 str >> accountType; // convert string to int

 cout << "Input your name: \n";
 cin >> str;
 str >> ownerName;

 cout << "Input your Social Security Number: \n";
 cin >> str;
 str >> ssn; // convert to long

 cout << "Input your account closure penalty percent: \n";
 cin >> str;
 str >> accountClosurePenaltyPercent; // convert to double

 cout << "Input your account closure penalty percent: \n";
 cin >> str;
 str >> accountClosurePenaltyPercent; // convert to double

 cout << "Input your account balance: \n";
 cin >> str;
 str >> accountBalance; // convert to double
}

int main()
{
 SavingsAccount newAccount;
 newAccount.setData();
}
person SimonDever    schedule 14.11.2009
comment
Не ошибка компиляции, а ошибка времени выполнения, с которой я не знаком. Это: Assignment8_1(491) malloc: *** ошибка для объекта 0x100006240: освобождаемый указатель не был выделен *** установить точку останова в malloc_error_break для отладки прерывания выхода из ловушки Я думаю, я не знал, что если бы вы могли установить строки как я сделал это здесь, как int или double. Спасибо! - person Crystal; 14.11.2009
comment
Вы также можете подумать об использовании конструктора и деструктора для класса SavingsAccount, чтобы можно было использовать ключевые слова new и delete и управлять выделением памяти. Это может помочь вам избежать ошибки во время выполнения. - person SimonDever; 14.11.2009