В этом разделе предлагаются вопросы для самоконтроля и укрепления полученных знаний и приводится несколько упражнений, которые помогут закрепить ваши практические навыки. Попытайтесь самостоятельно ответить на вопросы теста и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г. Не приступайте к изучению материала следующей главы, если для вас остались неясными хотя бы некоторые из вопросов, предложенных ниже.
1. Как объявить класс, являющийся частным проявлением другого класса?
2. Как объявить класс, объекты которого должны использоваться в качестве переменных-членов другого класса?
3. В чем состоят различия между вложением и делегированием?
4. В чем состоят различия между делегированием и выполнением класса в пределах другого класса?
5. Что такое функция-друг?
6. Что такое класс-друг?
7. Если класс Dog является другом Boy, то можно ли сказать, что Boy — друг Dog?
8. Если класс Dog является другом Boy, а Terrier произведен от Dog, является ли Terrier другом Boy?
9. Если класс Dog является другом Boy, а Boy — другом House, можно ли считать Dog другом House?
10. Где необходимо размещать объявление функции-друга?
1. Объявите класс Animal, который содержит переменную-член, являющуюся объектом класса String.
2. Объявите класс BoundedArray, являющийся массивом.
3. Объявите класс Set, выполняемый в пределах массива BoundedArray.
4. Измените листинг 15.1 таким образом, чтобы класс String включал перегруженный оператор вывода (>>).
5. Жучки: найдите ошибки в этом коде:
1: #include
2:
3: class Animal;
4:
5: void setValue(Animal& , int);
6:
7:
8: class Animal
9: {
10: public:
11: int GetWeight()const { return itsWeight; }
12: int GetAge() const { return itsAge; }
13: private:
14: int itsWeight;
15: int itsAge;
16: };
17:
18: void setValue(Animal& theAnimal, int theWeight)
19: {
20: friend class Animal;
21: theAnimal.itsWeight = theWeight;
22: }
23:
24: int main()
25: {
26: Animal peppy;
27: setValue(peppy,5);
28: }
6. Исправьте листинг, приведенный в упражнении 5, и откомпилируйте его.
7. Жучки: найдите ошибки в этом коде:
1: #include
2:
3: class Animal;
4:
5: void setValue(Animal& , int);
6: void setValue(Animal&. ,int,int);
7:
8: class Animal
9: {
10: friend void setValue(Animal& ,int);
11: private:
12: int itsWeight;
13: int itsAge;
14: };
15:
16: void setValue(Animal& theAnimal, int theWeight)
17: {
18: theAnimal.itsWeight = theWeight;
19: }
20:
21:
22: void setValue(Animal& theAnimal, int theWeight, int theAge)
23: {
24: theAnimal.itsWeight = theWeight;
25: theAnimal.itsAge = theAge;
26: }
27:
28: int main()
29: {
30: Animal peppy;
31: setValue(peppy,5);
32: setValue(peppy, 7, 9);
33: }
8. Исправьте листинг, приведенный в упражнении 7, и откомпилируйте его.
Ранее для вывода на экран и считывания с клавиатуры мы использовали объекты cout и cin, не понимая до конца принципов их работы. Сегодня вы узнаете:
• Что такое потоки ввода-вывода и как они используются
• Как с помощью потоков управлять вводом и выводом данных
• Как с помощью потоков записывать информацию в файл и затем считывать ее
Язык программирования C++ специально не определяет, каким образом данные выводятся на экран или в файл либо как они считываются программой. Тем не менее эти особенности являются важной частью работы программиста, поэтому стандартная библиотека C++ включает библиотеку iostream, упрощающую ввод-вывод (I/O).
Благодаря выделению операций ввода-вывода в отдельную библиотеку упрощается создание аппаратно независимого языка разработки программ для разных платформ. Это позволяет создать программу на C++ для компьютеров PC, а затем откомпилировать ее для рабочей станции Sun. Разработчики снабдили компилятор библиотеками для всех случаев. Так, по крайней мере, должно быть теоретически.
Примечание: Библиотека — это набор файлов OBJ, которые можно подключать к программе для получения дополнительных функциональных возможностей. Это наиболее распространенная форма многократного использования кода, и можно сказать, что она существует еще с тех пор, как первобытные программисты каменного века выбивали первые нули и единицы на стенах своих пещер.
Классы iostream рассматривают информацию, выводимую программой на экран, как побитовый поток данных. Если данные выводятся в файл или на экран, то источник потока, как правило, содержится в программе. Если же поток направлен в противоположную сторону, данные могут поступать с клавиатуры или файла на диске. В этом случае они заносятся в переменные.
Читать дальше