Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

В контексте объектно-ориентированного программирования, объект некоторого класса, обычно, характеризуется данными, которые принадлежат объекту, и поведением. Поведение объектов класса определяется



Лаб. 6a.

В контексте объектно-ориентированного программирования, объект некоторого класса, обычно, характеризуется данными, которые принадлежат объекту, и поведением. Поведение объектов класса определяется его методами.

Динамическое множественное наследование означает, что класс C может быть производным от класса A ИЛИ от класса B, т.е., объект класса C может вести себя либо как объект из A, либо как объект из B. Решение о том, как будет получен производный класс принимается во время выполнения программы. Язык C++, в действительности, непосредственно не поддерживает такое динамическое множественное наследование.

Ниже приведен некоторый код (программа). Необходимо выполнить и ответить на вопросы:

  1. Откомпилировать и запустить.
  2. Изучить код и объяснить его работу.
  3. Написать объясняющие комментарии к строкам кода, помеченным двумя слэшами.
  4. Изменится ли ситуация, если класс R сделать абстрактным базовым классом?
  5. Можно ли написать шаблон класса C (с двумя параметрами) так, что функциональность всей программы не изменится, если класс C (и его объект) будет создан на основе шаблона? Если “Да”, то попытайтесь это сделать, если “Нет”, то почему?

 

 

#include <iostream>

 

using namespace std;

 

class R

{

protected:

int r;

public:

R(int x = 0): r(x) { }

virtual void print() {cout << "class R print" << endl;}

};

 

class A: public R

{

protected:

int a;

public:

A(int x = 0, int y = 0): R(x), a(y) { }

void print() {cout << "class A print" << endl;}

};

 

class B: public R

{

protected:

int b;

public:

B(int x = 0, int z = 0): R(x), b(z) { }

void print() {cout << "class B print" << endl;}

};

 

enum from {A_type, B_type};

 

class C

{

int c;

R * rptr;

public:

C(): rptr(NULL) { } // ……

C& C_ctor(int x, int w, int z, from t) //…….

{

if (t == A_type)

{

A * aptr = new A(x, w);

rptr = aptr;

}

if (t == B_type)

{

B * bptr = new B(x, w);

rptr = bptr;

}

c = z;

return *this;

}

void print() {rptr -> print();} //…….

~C() {delete rptr;}

};

 

int main()

{

C c;

int n;

 

cout << "Enter an integer.\n";

cin >> n;

 

if (n % 2)

{

// c ведет себя как производный от A

c.C_ctor(1, 2, 3, A_type);

c.print();

}

else

{

// c ведет себя как производный от B

c.C_ctor(1, 2, 3, B_type);

c.print();

}

return 0;

}

 

//The End.


Дата добавления: 2015-11-04; просмотров: 18 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
- Une carte postale de Daniel avait annoncé son arrivée pour ce mardi, il serait là vers cinq heures, apporterait une tarte à l'ananas et attendrait Martine. Il | What is population of Canada?

mybiblioteka.su - 2015-2024 год. (0.011 сек.)