|
Программирование >> Аргументация конструирования
Что такое this Я уже упоминал несколько раз о том, что такое this, тем не менее давайте : еще раз разберемся в этом вопросе, this - это указатель на текущий объект : внутри функции-члена. Он используется, когда не указано другое имя объекта. В обгчной функции-члене this - скрытый первый аргумент, передаваемый функции. class SC i { public: void nFn(int a); to же, что и SC::nFn(SC *this, int a) static void sFn{int a); to же, что и SC::sFn(int a) : }; : s.nFn(lO); Преобразуется в SC::nFn(ss, 10); s.sFn(lO); Преобразуется в SC::sFnC10); ; Таким образом, функция nFn () интерпретируется так же, как если бы мы объяви-.ли ее void SC::nFn(SC *this, int a). При вызове nPn () неявным первым аргументом ей передается адрес s (вы не можете записать вызов таким образом, . так как передача адреса объекта - дело компилятора). . Обращения к другим, не статическим членам из функции SC: :sFn автоматически . используют аргумент this как указатель на текущий объект. Однако при вызове , статической функции SC: : sFn () адрес объекта ей не передается и указателя this, который можно использовать при обращении к нестатическим членам, не существует. Поэтому мы и говорим, что статическая функция-член не связана с каким- I либо текущим объектом. qotcetu с классами - BUDGET2 . СРР В этом разделе обсуждается новая версия программы BUDGET, с которой вы уже встречались во второй части книги. Однако, в отличие от предыдущей функциональной версии, эта программа будет объектно-ориентированным решением, основанным на классах. В программе будет решаться задача по представлению счетов в том виде, какой они имеют в банке. Эта простая программа будет поддерживать возможности вклада (это хорошо) и снятия денег со счета (это еще лучше). (Первоначальная версия бюджета, приведенная в конце предыдущей части, работала только с одним типом банковского счета.) Эта версия поддерживает два типа счетов, каждый из которых будет иметь собственные, несколько отличные от другого счета правила. Чековый счет: удерживать 20 центов за каждый обработанный чек, если баланс падает ?: ниже 500 долларов; ? не удерживать 20 центов, если баланс больше 500 долларов. Сберегательный счет: не удерживать денег при первом снятии со счета за месяц; ;. удерживать 5.00 доллара за каждое последующее снятие. Рассматривая эту задачу, можно сразу отметить, что главными кандидатами на роль классов являются Checking и Savings. Поскольку данные-члены лучше сделать защищенными, нам понадобится несколько функций, обеспечивающих доступ к номеру и балансу счета. Как и любой класс king и Savings нуждаются в конструкторе, чтобы про-инициализировать объекты правильными значениями (как минимум, обнулить баланс). Кроме того, понадобятся еще две функции - deposit () (вклад) и withdrawal () (снятие). И наконец, в этой программе я добавил еще одну функцию-член, которая называется display (); она занимается отображением текущего объекта. Это необязательное требование, однако обычно так и поступают, позволяя объекту самому заниматься своим отображением, не полагаясь на внешнюю функцию (которой для правильного отображения может понадобиться информация о внутреннем устройстве класса или другая информация, которую вы, возможно, не захотите открывать). Вот текст этой программы. BUDGET2.CPP - программа бюджета, основанная на классах. tinclude <iostream.h> include <stdio.h> количество счетов const int maxAccounts = 10; - здесь описан чековый счет class Checking { public: Checking(int initializeAN = 0) { accountNurnber = initializeAN; J balance = 0.0; функции обращения int accountNoO return accountNurnber; double acntBalance ( ) return balance; функции транзакций void deposit(double amount) { balance += amount; void withdrawal(double amount) ; функция вывода объекта в cout void display О cout << Счет << accountNumber < << balance \n ; protected: unsigned accountNumber; double balance; withdrawal - эт дая-член слишком велика для inline-функции void Checking::withdrawal(double amount) { if (balance < amount) { cout << Недостаточна er: баланс равен balance << , сумма чека равна << amount << \п ; else { balance -= amount; если баланс падает слишком низко... if (balance < 500.00) ...удержать деньги за обслуживание balance -= 0.20; Savings - вы и сами можете написать этот класс class Savings ( public: Savings (int initialAN = 0) ( accountNumber = initialAN; balance = 0.0; noWithdrawals = 0; функции обращения int accountNoO return double return кции транзакций void deposit(double amount) amount; void amount);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |