Программирование >>  Расширенная версия языка c++ 

1 ... 30 31 32 [ 33 ] 34 35 36 ... 227


Проверка усвоения материала в целом

В этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав.

1. Функции можно перегружать благодаря отличиям в числе или типе их параметров. Перегрузите функцию loadstack() из вопроса 5 упражнений по проверке усвоения материала данной главы так, чтобы она получала в качестве аргумента целое число upper. В перегруженной версии, если переменная upper будет равной 1, загрузите стек символами алфавита в верхнем регистре. В противном случае загрузите его символами алфавита в нижнем регистре.

2. Используя клас rtype, представленный в разделе 3.1, пример 3, добавьте дружественную функцию, которая получает в качестве аргумента указатель на объект типа strtype и возвращает указатель на строку. (Таким образом, функция должна возвращать указатель р). Назовите эту функцию get string().

3. Если объект производного класса присваивается другому объекту того же производного класса, будут ли также копироваться данные, связанные с базовым классом? Чтобы ответить, воспользуйтесь следующими двумя классами и напишите программу.

class base { int a;

создайте функцию получающую в качестве аргумента объект типа

planet и возвращающую число секунд, за которые свет достигает планеты. (Предположим, что скорость света равна 186000 миль в секунду и что значение dist from siin, т. е. расстояние от Солнца, задано в милях.)

4. Можно ли адрес объекта передать функции в качестве аргумента?

5. Используя класс stack, напишите функции аск(), которая бы возвращала стек, заполненный буквами алфавита (a-z). В вызывающей программе присвойте этот стек другому объекту и докажите, что и в этом объекте находится алфавит. (Замечание. Удостоверьтесь, что длина стека достаточна для хранения алфавита.)

6. Объясните, почему необходимо быть внимательным при передаче объектов функциям или при возвращении объектов из функций.

7. Что такое дружественная функция?



public:

voi a(int n) { a = n; }

int { return a; }

If ,1

class derived: base {

int b;

public:

void load b (int n) { b = n; }

int get b() { return b; }

: I

.1 :. , .



Глава4

Массивы,

указатели и ссылки


В этой главе исследуется несколько важных аспектов применения массивов объектов и указателей на объекты. Заканчивается глава обсуясдением одного из самых важных нововведений C++ - ссылок. Ссылки определяют многие возможности C++, поэтому при чтении нужно быть особенно внимательным.

Повторение пройденного

Перед тем как продолжить, необходимо правильно ответить на следующие вопросы и сделать упражнения.

1. Что в действительности происходит при присваивании одного объекта

другому?

2. Могут ли возникать ошибки или побочные эффекты при присваивании одного объекта другому? (Приведите пример.)

3. Когда объект передается функции в качестве аргумента, создается копия этого объекта. Вызывается ли конструктор копии? Вызывается ли ее деструктор?

4. По умолчанию объект передается функции по значению, это означает, что появляющаяся внутри функции копия объекта не связана с аргументом, используемом при вызове, т. е. изменения копии не отражаются на оригинале. Возможно ли нарушение этого принципа? Если да, приведите пример.

5. Дан следующий класс, создайте функцию make sum(), возвращаемым значением которой является объект типа summation. Пользователь должен ввести число, затем функция должна создать объект, получающий это значение, и возвратить его вызвавщей процедуре. Покажите, что функция работает.

class summation { int num;

long sum; суммирование чисел, составляющих num



1 ... 30 31 32 [ 33 ] 34 35 36 ... 227

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