Рейтинговые книги
Читем онлайн Освой самостоятельно С++ за 21 день. - Джесс Либерти

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 160 161 162 163 164 165 166 167 168 ... 170

 Упражнения

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();

47:

48:    myClass obj3;

49:    obj3.ShowMember();

50:    obj3.ShowStatic();

51:    return 0;

52: }

3. Измените программу из упражнения 2 таким образом, чтобы доступ к статическойпеременной-члену осуществлялся с помощью статической функции-члена. Сделайте статическую переменную-член закрытой.

1: #include <iostream.h>

2:

3: class myClass

4: {

5:    public:

6:       myClass();

7:       ~myClass();

8:       void ShowMember();

9:       static int GetStatic();

10:   private:

11:      int itsMember;

12:      static int itsStatic;

13: }

14:

15: myClass::myClass():

16: itsMember(l)

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: " << itsMember << endl;

30: }

31:

32: int myClass::itsStatic = 0;

33:

34: void myClass::GetStatic()

35: {

36:    return itsStatic;

37: }

38:

39: int main()

40: {

41:    myClass obj1:

42:    obj1.ShowMeraber();

43:    cout << "Static: " << myClass::GetStatic() << endl;

44:

45:    myClass obj2;

46:    obj2.ShowMember();

47:    cout << "Static " << myClass::GetStatic() << endl;

48:

49:    myClass obj3;

50:    obj3.ShowMember();

51:    cout << "Static: " << myClass::GetStatic() << endl;

52:    return 0;

53: }

4. Создайте в программе из упражнения 3 указатель на функцию-член для доступа к значению нестатической переменной-члена и воспользуйтесь им для вывода этих значений на печать.

1: #include ciostream.h>

2:

3: class myClass

4: {

5:    public

6:       myClass();

7:       ~myClass();

8:       void ShowMember();

9:       static int GetStatic();

10:   private:

11:      int itsMember;

12:      static int itsStatic;

13: }

14:

15: myClass::myClass():

16: itsMember(1)

17: {

18:    itsStatic++;

19: }

20:

21: myClass::~myClassO

22: {

23:    itsStatic--;

24:    cout << "In destructor. ItsStatic: " << itsStatic << endl;

25: }

26:

27: void myClass::ShowMember()

28: {

29:    cout << "itsMember: " << itsMember << endl;

30: }

31:

32: int myClass::itsStatic = 0;

33:

34: int myClass::GetStatic()

35: {

36:    return itsStatic;

37: }

38:

39: int main()

40: {

41:    void (myClass::*PMF) ();

42:

43:    PMF=myClass: :ShowMember;

44:

45:    myClass obj1;

46:    (obj1.*PMF)();

47:    cout << "Static: " << myClass::GetStatic() << endl;

48:

49:    myClass obj2:

50:    (obj2.*PMF)();

51:    cout << "Static: " << myClass::GetStatic() << endl;

52:

53:    myClass obj3;

54:    (obj3.*PMF)();

55:    cout << "Static: " << myClass::GetStatic() << endl;

56:    return 0;

57: }

5. Добавьте две дополнительные переменные-члена к классу из предыдущих упраж-

нений. Добавьте методы доступа, возвращающие значения всех этих переменных.

Все функции-члены должны возвращать значения одинакового типа и иметь оди-

наковую сигнатуру. Для доступа к этим методам используйте указатель на функ-

цию-член.

1: #include<iostream.h>

2:

3: class myClass

4: {

5:    public:

6:       myClass();

7:       ~myClass();

8:       void ShowMember();

9:      void ShowSecond();

10:      void ShowThird();

11:      static int GetStatic();

12:   private:

13:      int itsMember;

14:      int itsSecond;

15:      int itsThird;

16:      static int itsStatic;

17: }

18:

19: myClass::myClass()

20:    itsMember(1),

21:    itsSecond(2),

22:    itsThird(3)

23: {

24:    itsStatic++;

25: }

27: myClass::^rnyClass()

28: {

29:    itsStatic--;

30:    cout << "In destructor. ItsStatic: " << itsStatic << endl;

31: }

32:

33: void myClass::ShowMember()

34: {

35:    cout << "itsMember: " << itsMember << endl;

36: }

37:

38: void myCIass:: ShowSecond()

39: {

40:    cout << "itsSecond: " << itsSecond << endl;

41: }

42:

43: void myClass::ShowThird()

44: {

45:    cout << "itsThird: " << itsThird << endl;

46: }

47: int myClass::itsStatic = 0;

48:

49: int myClass::GetStatic()

50: {

51:    return itsStatic;

52: }

53:

54: int main()

55: {

56:    void (myClass::*PMF) ();

57:

58:    myClass obj1;

59:    PMF=myClass::ShowMember;

60:    (obj1.*PMF)();

61:    PMF=myClass::ShowSecond;

62:    (obj1.*PMF)();

63:    PMF=myClass::ShowThird;

64:    (ob]1 "PMF)();

65:    cout << "Static: " << myClass::GetStatic() << endl;

66:

67:    myClass obj2;

68:    PMF=myClass::ShowMerober;

69:    (obj2.*PMF)();

70:    PMF=myClass::ShowSecond;

71:    (obj2.*PMF)();

72:    PMF=myClass::ShowThird;

73:    (obj2. *PMF)();

74:    cout << "Static: " << myClass::GetStatic() << endl;

1 ... 160 161 162 163 164 165 166 167 168 ... 170
На этой странице вы можете бесплатно читать книгу Освой самостоятельно С++ за 21 день. - Джесс Либерти бесплатно.

Оставить комментарий