Программирование >>  Аргументация конструирования 

1 ... 65 66 67 [ 68 ] 69 70 71 ... 108



Что такое 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);



1 ... 65 66 67 [ 68 ] 69 70 71 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика