Освой самостоятельно С++ за 21 день.
Шрифт:
5. Объявите класс Vehicle (Машина) как абстрактный тип данных.
class Vehicle
{
virtual void Move = 0;
}
6. Если в программе объявлен класс ADT с тремя чистыми виртуальными функциями, сколько из них нужно заместить в производных классах, чтобы получить возможность создания объектов этих классов?
Если нужно произвести еще один абстрактный класс, то можно заместить одну или две чистые виртуальные функции базового класса, либо не замешать их вообще. В случае наследования обычного
Упражнения
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. Измените программу из предыдущего упражнения таким образом, чтобы класс Саr тоже стал ADT, и произведите от него три новых класса: SportsCar (Спортивный автомобиль), Wagon (Фургон) и Coupe (Двухместный автомобиль-купе). В классе Саr должна замещаться одна из виртуальных функций, объявленных в классе 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;
virtual void Haul;
}
class SportsCar : public Car
{
virtual void Haul;
}
class Coupe : public Car
{
virtual void Haul;
}
День 14
Контрольные вопросы
1. Могут ли статические переменные-члены быть закрытыми?
Да. Поскольку они являются переменными-членами, то доступ к ним может управляться подобно доступу к любым другим переменным-членам. Если статическая переменная-член объявлена как закрытая, то доступ к ней можно получить только с помошью открытого статического метода класса.
2. Объявите статическую переменную-член.
static int itsStatic;
3. Объявите статическую функцию.
static int SomeFunction;
4. Объявите указатель на функцию, принимающую параметр типа int и возвращающую значение типа long.
long (*function)(int);
5. Измените указатель, созданный в задании 4, на указатель на функцию-член класса Саr.
long ( Car::*function)(int);
6. Объявите массив из десяти указателей, созданных в задании 5.
long ( Car::*function)(int) theArray [10];
Упражнения
1. Напишите короткую программу, объявляющую класс с одной обычной переменной-членом и одной статической переменной-членом. Создайте конструктор, выполняющий инициализацию переменной-члена и приращение статической переменной-члена. Затем объявите деструктор, который уменьшает на единицу значение статической переменной.
1: class myClass
2: {
3: public:
4: myClass;
5: ~myClass;
6: private:
7: int itsMember;
8: static int itsStatic;
9: };
10:
11: myClass::myClass:
12: itsMember(1)
13: {
14: itsStatic++;
15: }
16:
17:myClass::~myClass
18: {
19: itsStatic—-;
20: }
21:
22: int myClass::itsStatic = 0;
23:
24: int main
25: {}
2. Используя программный блок из упражнения 1, напишите короткую выполняемую
программу, которая создает три объекта, а затем выводит значения их перемен-
ных-членов и статической переменной-члена класса. Затем последовательно уда-
ляйте объекты и выводите на экран значение статической переменной-члена.
1: #include <iostream.h>
2:
3: class myClass
4: {
5: public:
6: myClass;
7: ~myClass;
8: void ShowMember
9: void ShowStatic;
10: private:
11: int itsMember;
12: static int itsStatic;
13: };
14:
15: myClass::myClass:
16: itsMember(1)
17: {
18: itsStatic++;
19: }
20:
21: myClass::~myClass
22: {
23: itsStatic--;
24: cout << "In destructor. ItsStatic: " << itsStatic << endl;
25: }
26:
27: void myClass::ShowMember
28: {
29: cout << "itsMember: " << itsMereber << endl;
30: }
31:
32: void myClass::ShowStatic
33: {
34: cout << "itsStatic: " << itsStatic << endl;
35: }
36: int myClass::itsStatic = 0;
37:
38: int main
39: {
40: myClass obj1;
41: obj1.ShowMember;
42: obj1.ShowStatic;
43:
44: myClass obj2;
45: obj2.ShowMember;
46: obj2.ShowStatic;