Хелпикс

Главная

Контакты

Случайная статья





Пример программирования. Пример 1.3.



Пример программирования

Пример 1.2. Написать программу с наследованием класса стек от класса массив.

#include <iostream>

#include <stdlib.h>

using namespace std;

 

class massiv

{ int *num;

int kol;

public:

     massiv(int n);

     void print();

     virtual int kolich(){return kol;}

     void put(int k,int n){num[k]=n;}

~massiv(){delete num;}

};

massiv::massiv(int n)

{ num=new int[n];

kol=n;

for(int i=0;i<kol;i++) num[i]=random(100)-50;

}

void massiv::print()

{ for(int i=0;i<kolich();i++) cout<<num[i]<<" ";

cout<<endl;

}

class stec:public massiv

{ int top;

public:

stec(int);

virtual int kolich() {return top;}

void pop(int k);

};

stec::stec(int n):massiv(n)

{ top=0;

}

void stec::pop(int k)

{ put(top++,k); }

void main()

{ randomize();

massiv a(10);

a.print();

stec b(10);

b.pop(random(100)-50);

b.pop(random(100)-50);

b.pop(random(100)-50);

b.print();

}

Главное отличие виртуальной функции от просто перегруженной в том, какая функция будет вызываться при рассмотрении производного класса как базового.

Пример 1.3.

#include <iostream>

using namespace std;

class Base

{ public:

Base(){};

Print(){ cout<<”I’m a Base print”<<endl;}

virtual View(){ cout<<”I’m a Base view”<<endl;}

};

class Derived: public Base

{ public:

Derived(){};

Print(){ cout<<”I’m a Derived print”<<endl;}

View(){ cout<<”I’m a Derived view”<<endl;}

};

void main(void)

{ Base *A=new Base;

Derived *B=new Derived;

Base *C;

A->Print();

A->View();

B->Print();

B->View();

C=(Base *)B;

C->Print();

C->View();

}

Результат:

“I’m a Base print”

“I’m a Base view”

“I’m a Derived print”

“I’m a Derived view”

“I’m a Base print”

“I’m a Derived view”

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



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.