Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как использовать static, почти сделал программу...осталось static 
V
    Опции темы
Zakary
Дата 25.4.2009, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



привет smile
надо сделать чтобы annualInterestRate был static и хранил информацию о годовом проценте для каждого объекта, и ещё функцию modifyInterestRate надо тоже сделать static, чтоб она инициализировала annualInterestRate. 

есть предположения? 
Код

.h
class SavingsAccount
{
private:
    double annualInterestRate;
    double savingBalance;
public:
    SavingsAccount(double=0);
    double getAccountBalance();
    void setAccountBalance(double);
    void setInterestRate(double);
    double CalculateMonthlyInterest();//balance*(InterestRate/12) //should be added to savingsbalance
double modifyInterestRate();//sets annualInterestRate
};

.cpp
#include <iostream>

using namespace std;
#include "SavingsAccount.h"
SavingsAccount::SavingsAccount(double money)
{
    if (money<0)
        money=0;
    setAccountBalance(money);
}

void SavingsAccount::setAccountBalance(double money)
{
    savingBalance=money;
}
double SavingsAccount::getAccountBalance()
{
    return savingBalance;
}
void SavingsAccount::setInterestRate(double rate)
{
    annualInterestRate=rate;
}

double SavingsAccount::CalculateMonthlyInterest()
{
    return savingBalance*(annualInterestRate/12);
}

double SavingsAccount::modifyInterestRate()
{
    double interestRate;
    cout<<"Enter interest rate for next month: ";
    cin>>interestRate;
    cout<<endl;
    annualInterestRate=interestRate;

    return annualInterestRate;
}

main.cpp
#include <iostream>
using namespace std;
#include "SavingsAccount.h"
int main()
{

    SavingsAccount b(2000.00);
    SavingsAccount c(3000.00);
    cout<<"Initial Balance for person b: "<< b.getAccountBalance()<<endl;
        b.setInterestRate(0.03);
        cout<<"Balance after setInterestRate: "<<b.getAccountBalance()+b.CalculateMonthlyInterest()<<endl;
        b.modifyInterestRate();
        cout<<"new balance= "<<b.getAccountBalance()+b.CalculateMonthlyInterest()<<endl;
        
        cout<<"Initial Balance for person c: "<<c.getAccountBalance()<<endl;
        c.setInterestRate(0.03);
        cout<<"Balance after setInterestRate: "<<c.getAccountBalance()+c.CalculateMonthlyInterest()<<endl;
        c.modifyInterestRate();
        cout<<"new balance= "<<c.getAccountBalance()+c.CalculateMonthlyInterest()<<endl;
    return 0;
}


PM MAIL   Вверх
Rififi
Дата 25.4.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



static - оно в единственном экземпляре на весь класс, и что-то хранить "для каждого объекта" не может. by design.
PM MAIL   Вверх
zim22
Дата 25.4.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



header.h
Код

class C {
public:
  static int get_var() { return var; }
private:
  static int var;
};

source.cpp
Код

#include "header.h"
int C::var = 99;

main.cpp
Код

#include "header.h"
int main() 
{
  int res = C::get_var();
}


Это сообщение отредактировал(а) zim22 - 25.4.2009, 07:26


--------------------
PM MAIL   Вверх
Zakary
Дата 25.4.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



получаю вот такое:
"1>SavingsAccount.obj : error LNK2001: unresolved external symbol "private: static double SavingsAccount::annualInterestRate" (?annualInterestRate@SavingsAccount@@0NA)
1>C:\Users\Rus\Documents\Visual Studio 2008\Projects\q\Debug\q.exe : fatal error LNK1120: 1 unresolved externals"

PM MAIL   Вверх
Rififi
Дата 25.4.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Zakary, 
1. смотри пример zim22, 
2. найди отличие
PM MAIL   Вверх
Zakary
Дата 26.4.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



чертsmile)) я не инициализировал static в cpp
спасибо zim, всегда очень полезенsmile
спасибо Rififi, что ткнул носом куда смотреть надо smile



PM MAIL   Вверх
zim22
Дата 27.4.2009, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Вот финт ушами, как эмулировать static функции:
Код

class X {
public:
  void fcn() { std::cout << "hello"; }  
};

int main()
{
  ((X*)0)->fcn();     
}




--------------------
PM MAIL   Вверх
Zakary
Дата 27.4.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



((X*)0)->fcn().

что делает поинтер ноль? почему ноль?  smile 
PM MAIL   Вверх
586
Дата 27.4.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Цитата(Zakary @  27.4.2009,  09:15 Найти цитируемый пост)
что делает поинтер ноль? почему ноль?

Указатель this равен 0. Ошибки не возникает потому, что в методе указатель this не используется.
Код
#include <iostream>

class X {
  int x;
public:
  void fcn()
  {
    std::cout << this << std::endl;
    //this->x = 0; // error
    //x = 0; //error
  }
};

int main()
{
  ((X*)0)->fcn();
  ((X*)5)->fcn();
}

PM   Вверх
Zakary
Дата 27.4.2009, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



оу спасибо...это интересно.. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.