Форум программистов, компьютерный форум CyberForum.ru

Необходимо провести рефакторинг - C++

Восстановить пароль Регистрация
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
30.09.2012, 20:22     Необходимо провести рефакторинг #1
Существует прогамма:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
using namespace std;
 
 
//Structure for a bank certificate of deposit:
struct CDAccount
{
    double balance;
    double interest_rate;
    int term;//months until maturity
};
 
 
void get_data(CDAccount& the_account);
//Postcondition: the_account.balance and the_account.interest_rate
//have been given values that the user entered at the keyboard.
 
 
int main( )
{
    CDAccount account;
    get_data(account);
 
    double rate_fraction, interest;
    rate_fraction = account.interest_rate/100.0;
    interest = account.balance*rate_fraction*(account.term/12.0);
    account.balance = account.balance + interest;
 
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout << "When your CD matures in " 
         << account.term << " months,\n"
         << "it will have a balance of $" 
         << account.balance << endl;
 system("Pause");
    return 0;
}
 
//Uses iostream:
void get_data(CDAccount& the_account)
{
    cout << "Enter account balance: $";
    cin >> the_account.balance;
 
    cout << "Enter account interest rate: ";
    cin >> the_account.interest_rate;
    cout << "Enter the number of months until maturity\n"
         << "(must be 12 or fewer months): ";
    cin >> the_account.term;
}
Необходимо переписать эту программу, чтобы:

- переопределить CDAccount, чтобы это был класс а не structure;
- member variable - были бы private;
- включить member functions для: to return the initial balance, to return the balance at maturity, to return the rent interest rate, to return term.
- включить конструктор кот опрел все member variables to any specified values, как же как default constructor.

Понимаю может быть простая задача, но я плохо разбираюсь - не могу до конца понять - понятие класса т конструктора.
Помогите разобраться.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.09.2012, 21:48     Необходимо провести рефакторинг #2
Тут особо разбираться не в чем. struct CDAccount, замените на class CDAccount. По умолчанию поля в class - private, поэтому переменные-члены будут private. Методы запишите в раздел public. И предложите вариант кода.
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
01.10.2012, 04:19  [ТС]     Необходимо провести рефакторинг #3
Вот что вышло. Что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;
 
 
class CDAccount 
{
 public:
        void CDAccount::get_data();
        CDAccount (double balance, double interst_rate, int term);
        CDAccount();
        CDAccount accountTwo();
        
 private:
    double balance;
    double interst_rate;
    int term;     
};
 
int main( )
{
    // Provide initial values for one but not the other 
CDAccount accountOne(1000.0, 4.0, 8);
CDAccount accountTwo;
        
        // Let user input values for second account to test inputAccountValues 
cout << "\n\nPlease enter values for Initial balance, Interest Rate and Term:\n";
 
 
    CDAccount account;
 
 
    double rate_fraction, interest;
    
    rate_fraction = interest_rate/100.0;
    interest = balance*rate_fraction*(term/12.0);
    account.balance = account.balance + interest;
 
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout << "Homework 5 Project 5\n";
    cout << "Test Program for CDAccount class\n" << endl;
    cout << "Testing individual accessor functions: \n" << endl;
    
    cout << "First Account Final Balance: " << account.balance << endl;
 
    system("Pause");
    return 0;
}
 
CDAccount::CDAccount()
 
void CDAccount::get_data()
{
    cout << "First Account Final Balance: " ;
    cin >> balance;
 
    cout << "First Account Rate: ";
    cin >> interest_rate;
    
    cout << "First Account Term: ";
    cin >> term;
}
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
01.10.2012, 05:04     Необходимо провести рефакторинг #4
например так, заработает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
using namespace std;
 
 
class CDAccount
{
 public:
        void get_data();
        CDAccount (double balance, double interst_rate, int term);
        CDAccount(){}
 
        double Interest_rate()const{return interst_rate;}
        void Interest_rate(const double val){interst_rate=val;}
 
        double Balance()const{return balance;}
        void Balance(const double val){balance=val;}
 
        int Term()const{return term;}
        void Term(const int val){term=val;}
 
 
 private:
    double balance;
    double interst_rate;
    int term;
};
 
int main( )
{
    // Provide initial values for one but not the other
//CDAccount accountOne(1000.0, 4.0, 8);
//CDAccount accountTwo;
 
        // Let user input values for second account to test inputAccountValues
cout << "\n\nPlease enter values for Initial balance, Interest Rate and Term:\n";
 
 
    CDAccount account;
 
 
    double rate_fraction, interest;
 
    account.get_data();
 
    rate_fraction = account.Interest_rate()/100.0;
    interest = account.Balance()*rate_fraction*(account.Term()/12.0);
    account.Balance(account.Balance() + interest);
 
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout << "Homework 5 Project 5\n";
    cout << "Test Program for CDAccount class\n" << endl;
    cout << "Testing individual accessor functions: \n" << endl;
 
    cout << "First Account Final Balance: " << account.Balance() << endl;
 
    system("Pause");
    return 0;
}
 
 
void CDAccount::get_data()
{
    double b,i;
    int t;
 
    cout << "First Account Final Balance: " ;
    cin >>b;
    Balance(b);
 
    cout << "First Account Rate: ";
    cin >> i;
    Interest_rate(i);
 
    cout << "First Account Term: ";
    cin >> t;
    Term(t);
}
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
01.10.2012, 05:36  [ТС]     Необходимо провести рефакторинг #5
Огромное спасибо!!!
Yandex
Объявления
01.10.2012, 05:36     Необходимо провести рефакторинг
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru