Виртуальный деструктор
Практически всегда деструктор делается виртуальным. Делается это для того, чтобы корректно (без утечек памяти) уничтожались объекты не только заданного класса, а и любого производного от него.
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!