|
Программирование >> Дополнительные возможности наследования
Упражнения 1. Объявите двухмерный массив, который представляет поле для игры в крестики и нолики. int СатеВоагс1[3][3]; 2. Запишите профаммный код, инициализирующий значением О все элементы созданного перед этим массива. int GameBoarcl[3][3] = { {О, О, 0}, {О, О, 0}, {О, О, 0} } 3. Объявите класс узла Node, поддерживающего целые числа. class Node { public: Node О; Node (int); NodeO; void SetNext(Node * node) { itsNext = node; } Node * GetNextO const { return itsNext; } int GetValO const { return itsVal; } void Insert(Node ); void DisplayO; private: int itsVal; Node * itsNext; 4. Жучки: что неправильно в следующей профамме? unsigned short SomeArray[5][4]; for (int i = 0; i<4; i++) for (int j = 0; j<5; j++) SomeArray[i][j] = i+j; Массив SomeArray предназначен для хранения 5x4 элементов, но код инициализирует матрицу 4x5 элементов. 5. Жучки: что неправильно в следующей профамме? unsigned short SomeArray[5][4]; for (int 1 = 0; i<=5; i++) for (int j = 0; j<=4; j++) SomeArray[i][j] = 0; Вероятно, профаммист хотел написать i < 5, но написал вместо этого i <= 5. Профамма будет работать, когда i == 5 и j == 4, но в массиве SomeArray нет такого элемента, как 5отеАггау[5][4]. День 13 1. Что такое приведение типа объекта вниз? Под приведением типа объекта вниз понимается такое объявление, когда указатель на базовый класс приводится во время выполнения профаммы к указателю на производный класс. 2. Что такое v-ptr? Указатель на виртуальную функцию v-ptr является элементом выполнения виртуальных функций. Каждый объект в классе, содержащем виртуальные функции, имеет указатель v-ptr, который ссылается на таблицу виртуальных функций для этого класса. 3. Предположим, для создания прямоугольника с закругленными углами используется класс RoundRect, произведенный от двух базовых классов - Rectangle и Circle, которые, в свою очередь, производятся от общего класса Shape. Как много объектов класса Shape создается при создании одного объекта класса RoundRect? Если никакой класс не наследует использование ключевого слова virtual, то создаются два объекта класса Shape: один для класса RoundRect и один для класса Circle. Если же ключевое слово virtual используется для обоих классов, то создается только один общий объект класса Shape. 4. Если классы Horse (Лощадь) и Bird (Птица) виртуально наследуются от класса Animal (Животное) как открытые, будут ли консфукторы этих классов инициализировать консфуктор класса Animal? Если класс Pegasus (Пегас) наследуется сразу от двух классов. Horse и Bird, как в нем будет инициализироваться консфуктор класса Animal? Оба класса Horse и Bird инициализируют в своих консфукторах базовый класс Animal. Класс Pegasus делает то же самое, но когда создается объект класса Pegasus, инициализации класса Animal в производных классах Horse и Bird игнорируются. 5. Объявите класс Vehicle (Мащина) как абсфактный тип данных. class Vehicle { virtual void Move() = 0; 6. Если в профамме объявлен класс ADT с фемя чистыми виртуальными функциями, сколько из них нужно заместить в производных классах, чтобы получить возможность создания объектов этих классов? Если нужно произвести еще один абстрактный класс, то можно заместить одну или две чистые виртуальные функции базового класса, либо не замещать их вообще. В случае наследования обычного неабсфактного класса необходимо заместить все фи функции. �9498422 Упражнения 1. Опишите класс JetPlane (Реактивный самолет), наследуя его от двух базовых классов - Rocket (Ракета) и Airplane (Самолет). class JetPlane : public Rocket, public Airplane 2. Произведите от класса JetPlane, объявленного в первом упражнении, новый класс 747, class 747 : public JetPlane 3. Напишите программу, производящую классы Саг (Легковой автомобиль) и Bus (Автобус) от класса Vehicle (Машина). Опишите класс Vehicle как абстрактный тип данных с двумя чистыми виртуальными функциями. Классы Саг и Bus не должны быть абстрактными. class Vehicle { virtual void Move() = 0; virtual void Haul() = 0; class Car : public Vehicle { virtual void Move(); virtual void Haul(); class Bus : public Vehicle { virtual void Move(); virtual void Haul(); 4. Измените программу из предьщущего упражнения таким образом, чтобы класс Саг тоже стал ADT, и произведите от него три новых класса: SportsCar (Спортивный автомобиль), Wagon (Фургон) и Coupe (Двухместный автомобиль-купе). В классе Саг должна замещаться одна из виртуальных функций, объявленных в классе Vehicle, с вызовом функции базового класса, class Vehicle { virtual void Move() = 0; virtual void Haul() = 0; class Car : public Vehicle { virtual void Move(); class Bus : public Vehicle { virtual void Move();
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |