Перезавантаження функцій
Ми можемо визначити для похідного класу методи з такими ж іменами, як і в базового класу. В цьому випадку має місце перезавантаження функцій. Така можливість може знадобитися, якщо для об’єктів базового і похідного класу в нашій програмі використовуються однакові виклики.
Проілюструємо це на такому прикладі. Одним з видів структур даних є стек, тобто такий набір даних, в якому останній доданий елемент видобувається першим. В формі стеків реалізується архітектура мікропроцесорів, функції передають аргументи і зберігають повернуті адреси у вигляді стеків. Далі приведена програма 17.3 моделює простий стек
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Stack
{private:
enum{MAX=10};
int st[MAX];
int top;
public:
Stack()
{top=0;}
void push(int var)
{st[++top]=var;}
int pop()
{return st[top--];}
};
////////////////////
int main()
{
clrscr();
Stack s1;
s1.push(11);
s1.push(22);
cout<<”1: “<<s1.pop()<<endl;
cout<<”2: “<<s1.pop()<<endl;
s1.push(33);
s1.push(44);
s1.push(55);
s1.push(66);
cout<<”3: “<<s1.pop()<<endl;
cout<<”4: “<<s1.pop()<<endl;
cout<<”5: “<<s1.pop()<<endl;
cout<<”6: “<<s1.pop()<<endl;
bioskey(0);
return 0;
}
Програма 17.3
Ця програма має деякі недоліки: не відсікає спроб покласти в стек більше елементів, ніж він спроможний помістити або видобути зі стеку більше елементів, ніж там є.
Для виправлення цих дефектів створимо новий клас Stack2, похідний від Stack. Об’єкти похідного класу поводяться як елементи базового, але попереджають про спроби переповнити стек або видобути елемент з порожнього стеку.
Далі приведений лістінг програми 17.4
#include <iostream.h>
#include <conio.h>
#include <bios.h>
#include<process.h>
class Stack
{protected:
enum{MAX=10};
int st[MAX];
int top;
public:
Stack()
{top=0;}
void push(int var)
{st[++top]=var;}
int pop()
{return st[top--];}
};
//////////
class Stack2:public Stack
{public:
void push(int var)
{if (top>=MAX-1)
{cout<<"Стек повний";exit(1); }
Stack::push(var);
}
int pop()
{
if (top<=0)
{cout<<"\nСтек порожній\n"; bioskey(0);exit(1); };
return Stack::pop();
}
};
////////////////////
int main()
{
clrscr();
Stack2 s1;
s1.push(11);
s1.push(22);
s1.push(33);
cout<<endl<<s1.pop();
cout<<endl<<s1.pop();
cout<<endl<<s1.pop();
cout<<endl<<s1.pop();
cout<<endl;
bioskey(0);
return 0;
}
Програма 17.4
В цій програмі клас Stack такий сам, як і в попередній, за винятком того, що дані класу оголошені як protected.
Дата добавления: 2015-08-26; просмотров: 714;