Мы определили минимальный набор методов: инициализация, вывод на экран и добавление денег на счет. Эти методы служат только для демонстрации использования нашего класса TMoney в качестве поля другого класса. Обратите внимание на то, что в методах класса TCount мы применяем методы класса TMoney. А в методе AddSummaO продемонстрирован «двойной вложенный» доступ к методу сложения денег.
Работу методов класса TCount демонстрирует простая программа, представленная в листинге 1.22.
// инициализация денег
// инициализация счета
// добавление денег на счет
// инициализация счета выражением
Листинг 1.22. Использование класса TCount int main()
{ TMoney t,p,s; p.Init(100.12);
TCount tt, pp: tt.Initd. p): tt = tt.AddSumma(p): tt.DisplayCountO ; pp.Init(2, p.MultByNumber(1.5)); pp.DisplayCountO ; return 0:
}
Программа работает, и результат ее работы на экране выглядит так: 1000.07 руб.
Number: 1. Summa: 200.24 руб. Number: 2. Summa: 150.18 руб.
Контрольные вопросы
1. Что определяет класс? Чем отличается класс от объекта?
2. Можно ли объявлять массив объектов? А массив классов?
3. Разрешается ли объявлять указатель на объект? А указатель на класс?
4. Можно ли совместить определение класса с объявлением объекта?
5. Объясните разницу между определением класса и объявлением класса.
6. Объясните, чем различаются два объявления указателя:
Tclass *р = new Tclass; Tclass *р = new TclassO;
7. Как называется использование объекта одного класса в качестве поля другого класса?
8. Является ли структура классом? Чем класс отличается от структуры?
9. Какие ключевые слова в С++ обозначают класс?
10. Объясните принцип инкапсуляции.
11. Для чего нужны ключевые слова publicnprivate? Можно ли использовать ключевые слова public и private в структуре?
12. Существуют ли ограничения на использование ключевых слов publ i с и pr i -vate в классе? А в структуре?
13. Обязательно ли делать поля класса приватными? Как инициализировать приватные поля класса?
14. Что такое «метод»? Как вызывается метод? Может ли метод быть приватным?
15. Как определить метод непосредственно внутри класса? А вне класса?
16. Объясните, что понимается под интерфейсом класса.
17. Что обозначается ключевым словом this? Для чего может использоваться конструкция * t h i s ?
18. Что такое композиция?
19. Разрешается ли внутри метода объявлять объекты «своего» класса? Как присваивать таким объектам начальное значение?
20. Сколько места в памяти занимает объект класса? Как это узнать?
21. Каков размер «пустого» объекта? Влияют ли методы на размер объекта?
22. Одинаков ли размер класса и аналогичной структуры?
23. Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса?
24. Покажите, как осуществить выравнивание полей класса по границе двух байтов.
25. Разрешается ли параметрам методов присваивать значение по умолчанию?
26. Объясните, почему методы, реализующие бинарные операции (например, сложение), должны иметь один параметр.
27. Объясните назначение директивы #pragma.
28. Какой принцип объектно-ориентированного программирования проявляется в перегрузке методов? |