Читаем Освой самостоятельно С++ за 21 день. полностью

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

Коллоквиум

 В этом разделе предлагаются вопросы для самоконтроля и укрепления полученных знаний и приводится несколько упражнений, которые помогут закрепить ваши практические навыки. Попытайтесь самостоятельно ответить на вопросы теста и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г. Не приступайте к изучению материала следующей главы, если для вас остались неясными хотя бы некоторые из предложенных ниже вопросов.

Тест

1. Что такое v-таблица?

2. Что представляет собой виртуальный деструктор?

3. Можно ли объявить виртуальный конструктор?

4. Как создать виртуальный конструктор-копировщик?

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

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

7. Если в базовом классе функция объявлена как виртуальная, а в производном классе виртуальность функции указана не была, сохранится ли функция как виртуальная в следующем произведенном классе?

8. С какой целью используется ключевое слово protected?

Упражнения

1. Объявите виртуальную функцию, которая принимает одно целочисленное значение и возвращает void.

2. Запишите объявление класса Square, произведенного от класса Rectangle, который, в свою очередь, произведен от класса Shape.

3. Предположим, что в предыдущем примере объект класса Shape не использует параметры, объект класса Rectangle принимает два параметра (length и width), а объект класса Square — один параметр (length); запишите конструктор для класса Square.

4. Запишите виртуальный конструктор-копировщик для класса Square, взятого из упражнения 3.

5. Жучки: что неправильно в следующем программном коде?

void SomeFunction(Shape);

Shape * pRect = new Rectangle;

SoneFunction(*pRect);

6. Жучки: что неправильно в следующем программном коде?

class Shape

{

   public:

      Shape;

      virtual -Shape;

      virtual Shape(const Shape&);

};

День 12-й. Массивы и связанные листы

В программах, представленных в предыдущей главе, объявлялись одиночные объекты типов int, char и др. Но часто возникает необходимость создать коллекцию объектов, например 20 значений типа int или кучу объектов типа CAT. Сегодня вы узнаете:

• Что представляет собой массив и как его объявить

• Что такое строки и как их создавать с помощью массивов символов

• Какие существуют отношения между массивами и указателями

• Каковы особенности математических операций с указателями, связанными с массивами

Что такое массивы

Массивы представляют собой коллекции данных одного типа, сохраненные в памяти компьютера. Каждая единица данных называется элементом массива.

Чтобы объявить массив, нужно указать его тип, имя и размер. Размер задается числом, взятым в квадратные скобки, и указывает, сколько элементов можно сохранить в данном массиве, например:

long LongArray[25];

В этом примере объявляется массив под именем LongArray, который может содержать 25 элементов типа long int. Обнаружив подобную запись, компилятор резервирует в памяти компьютера место, чтобы сохранить 25 элементов указанного типа. Поскольку для сохранения одного значения типа long int требуется четыре байта памяти, то для заданного массива компилятор выделит цельную область памяти размером 100 байт (рис. 12.1).

Элементы массива

Адресация элементов массива определяется по сдвигу относительно адреса первого элемента, сохраненного в имени массива. Первый элемент массива имеет нулевой сдвиг. Таким образом, к первому элементу массива можно обратиться следующим об

разом: arrayName[0]. Если использовать пример массива, приведенный в предыдущем разделе, то обращение к первому элементу массива будет выглядеть так: LongArray[0], а ко второму — LongArray[1] и т.д. В общем виде, если объявлен массив Массив[n], то к его элементам можно обращаться, указывая индекс от Массив[0] до Массив[n-1].

Рис. 12.1. Объявление массива


Так, в нашем примере массива LongArray[25] для обращения к элементам используются индексы от LongArray[0]flo LongArray[24]. В листинге 12.1 показано объявление массива целых чисел из пяти элементов и заполнение его данными.

Листинг 12.1. Использование массива целых чисел 

1: //Листинг 12.1. Массивы

2: #include

3:

4: int main

5: {

6:    int myArray[5];

7:    int i;

8:    for ( i=0; i<5; i++) // 0-4

9:    {

10:      cout << "Value for myArray[" << i << "]: ";

11:      cin >> myArray[i];

12:   }

13:   for (i = 0; i<5; i++)

14:   cout << i << ": " << myArray[i] << "\n";

15:   return 0;

16: }


Результат:

Value for myArray[0] 3

Value for myArray[1] 6

Value for myArray[2] 9

Value for myArray[3] 12

Value for myArray[4] 15

0: 3

1: 6

2: 9

3: 12

4: 15


Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT