Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП_Си++_03_Наследование

.pdf
Скачиваний:
15
Добавлен:
12.02.2015
Размер:
289.86 Кб
Скачать

//операция delete сама вызовет нужный деструктор //(деструкторы должны быть виртуальными) for(int i=0;i<4;i++){

delete massiv[i];

}

21

3.4. Множественное наследование (несколько базовых классов)

class Time{ … };

class Time24: public Time { … }; class Time12: public Time { … };

class TimeUniv: public Time24, public Time12 { … };

У базовых классов Time24 и Time12 есть общий предок Time → производный класс TimeUniv унаследует два экземпляра полей этого предка.

class Time{ …

};

};

class Time24: virtual public Time { …

class

Time12: virtual public Time { …

};

class

TimeUniv: public Time24, public

Time12 { … };

Общий предок определен как виртуальный → класс TimeUniv содержит только один экземпляр полей класса Time

22

class List{// динамический однонаправленный список protected:

struct Elem{//представление одного элемента списка

int key;

//информативное поле

Elem* next; //указатель на следующий элемент };

Elem* first;

//указатель на первый элемент списка

Elem* current;

//указатель на текущий элемент списка

public:

//конструктор

List();

virtual ~List(); //деструктор

void operator + (int);

//добавить перед текущим

void operator - ();

//удалить текщий

void operator ++

();

//переместиться на один вправо

void operator --

();

//переместиться в начало

void print(const

char*);

};

 

 

class Stack: public List{// стек

public:

(int);

//положить в стек

void operator <<

void operator >>

(int&); //взять из стека

};

 

 

23

//=======Определение методов класса Stack=======

//

-------положить в стек-------

void Stack::operator << (int d){

 

-- (*this);

//переместиться в начало

 

(* this) + d; //добавить перед текущим

}

 

//(а он теперь первый) элементом

 

 

//

-------взять из стека-------

void Stack::operator >> (int &d){

 

-- (*this);

//переместиться в начало

}

- (*this);

//удалить текщий (а он теперь первый) элемент

 

 

24

void instructions(){ printf("************СПИСОК************\n"); printf("1 – добавить перед текущим\n"); printf("2 – удалить текущий\n");

printf("3 – переместиться вправо\n"); printf("4 – переместиться в начало\n"); printf("*************СТЕК*************\n"); printf("5 – положить в стек\n");

printf("6 – взять из стека\n"); printf("*****************************\n");

}

void main(){ Stack st; int d, key; do{

instructions(); key = 0; scanf("%i",&key);

25

switch(key){ case 1:

printf("Элемент: "); scanf("%i",&d);

st + d; st.print("Стек"); break;

//… case 5:

printf("Элемент: "); scanf("%i",&d);

st << d; st.print("Стек"); break;

case 6:

st >> d; st.print("Стек"); break;

}

}while ((key > 0)&&(key < 7));}

26