Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 39 стр.

UptoLike

Составители: 

39
} }
main()
{ //client cl; Ошибка! Все компоненты client частные
bank SB("Сбербанк");
char c=0;
while(c!=27) //цикл до нажатия клавиши ESC
{ SB.AddClient(); //ввод информации об очередном клиенте
c=getch();
}
SB.PrintAll();
}
В программе вновь определены два класса: bank и client. Класс client хра-
нит информацию о клиенте банка, а также необходимые интерфейсные мето-
ды. Класс банк хранит список всех клиентов, хранящих свои вклады в данном
банке. Список клиентов оформлен в виде динамического односвязного списка,
что позволяет не ограничивать максимально допустимое количество клиентов
банка. В связи с этим в классе client появляется новый компонентnext, хра-
нящий адрес следующего клиента в списке, а в классе bank компонентные
данные first и head, хранящие адрес первого и последнего клиента в списке.
Соответственно, функции класса bank создают, просматривают, уничтожают
динамический односвязный список объектов класса клиент. При этом класс
bank должен быть обязательно дружественен классу client, поскольку методы
AddClient, PrintAll и деструктор класса bank работают с частными компонен-
тами класса client (в частности, с компонентами next, ReadClent, PrintClient,
конструктором и деструктором). Необходимо обратить внимание на то, что в
последнем примере все компоненты класса client (и компонентные данные, и
методы класса, и даже конструктор
с деструктором) являются частными. Та-
ким образом, в любой внешней по отношению к классу функции (например, в
функции main) запрещен доступ к компонентам класса client, более того, за-
прещено даже создание объекта данного класса в main, поскольку определе-
ние объекта сопровождается вызовом конструктора, а он в данном примере
также объявлен частным. В
такой ситуации единственным способом работы с
 }}
main()
{ //client cl; Ошибка! Все компоненты client частные
  bank SB("Сбербанк");
  char c=0;
  while(c!=27) //цикл до нажатия клавиши ESC
   { SB.AddClient();    //ввод информации об очередном клиенте
     c=getch();
   }
  SB.PrintAll();
}
     В программе вновь определены два класса: bank и client. Класс client хра-
нит информацию о клиенте банка, а также необходимые интерфейсные мето-
ды. Класс банк хранит список всех клиентов, хранящих свои вклады в данном
банке. Список клиентов оформлен в виде динамического односвязного списка,
что позволяет не ограничивать максимально допустимое количество клиентов
банка. В связи с этим в классе client появляется новый компонент – next, хра-
нящий адрес следующего клиента в списке, а в классе bank – компонентные
данные first и head, хранящие адрес первого и последнего клиента в списке.
Соответственно, функции класса bank создают, просматривают, уничтожают
динамический односвязный список объектов класса клиент. При этом класс
bank должен быть обязательно дружественен классу client, поскольку методы
AddClient, PrintAll и деструктор класса bank работают с частными компонен-
тами класса client (в частности, с компонентами next, ReadClent, PrintClient,
конструктором и деструктором). Необходимо обратить внимание на то, что в
последнем примере все компоненты класса client (и компонентные данные, и
методы класса, и даже конструктор с деструктором) являются частными. Та-
ким образом, в любой внешней по отношению к классу функции (например, в
функции main) запрещен доступ к компонентам класса client, более того, за-
прещено даже создание объекта данного класса в main, поскольку определе-
ние объекта сопровождается вызовом конструктора, а он в данном примере
также объявлен частным. В такой ситуации единственным способом работы с


                                           39