Виртуальный деструктор



Практически всегда деструктор делается виртуальным. Делается это для того, чтобы корректно (без утечек памяти) уничтожались объекты не только заданного класса, а и любого производного от него.

class Father{public: Father() {} virtual ~Father() {} };

class Son: public Father{private: int* buffer;public:

Son(): Father() { buffer = new int[1024]; }

virtual ~Son() { delete[] buffer; }};

т 7 8 }

return 1; }


Совместное использование шаблонов и наследование

Шаблоны и наследование представляют собой механизмы повторного использования кода и могут включать полиморфизм. Шаблоны и наследования связаны между собой следующим образом: – шаблон класса может быть порожден от обычного класса; – шаблонный класс может быть производным от шаблонного класса; – обычный класс может быть производным от шаблона класса.

emplate <class T> class vect {protected: T *ms; int size; public: vect(int n): size(n) { ms=new T[size];}

~vect(){delete [] ms;} T &operator[](const int ind)

{ if((ind>0)&&(ind<size))return ms[ind];else return ms[0];}};

template <class T> class oper: public vect<T>

{ public: oper(int n): vect<T>(n) {} ~oper(){}

void print(){ for(int i=0;i<size;i++) cout<<ms[i]<<' '; cout<<endl; } };void main()

{ oper <int> v_i(4); oper <double> v_d(4);

v_i[0]=5;v_i[1]=3;v_i[2]=2;v_i[3]=4;v_d[0]=1.3;v_d[1]=5.1;

v_d[2]=.5;v_d[3]=3.5;cout<<"int вектор = "; v_i.print();

cout<<"double вектор = ";v_d.print(); }

 



Дата добавления: 2015-12-21; просмотров: 129; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!