// PL8/destructor.cpp
// Demonstrate where destructors are called
// Niels Walet, Last modified 03/12/2019
#include<iostream>
#include<string>
class particle
{
protected:
double charge;
public:
particle(double q) : charge{q}{}
virtual ~particle(){std::cout<<"Calling base class destructor"<<std::endl;}
virtual void info(){std::cout<<"particle: charge="<<charge<<"e"<<std::endl;}
};
class ion : public particle
{
private:
int atomic_number;
public:
ion(double q, int Z) : particle{q}, atomic_number{Z}{}
~ion(){std::cout<<"Calling derived class destructor"<<std::endl;}
void info()
{
std::cout<<"ion: charge="<<charge
<<"e, atomic number="<<atomic_number<<std::endl;
}
};
int main()
{
// Array of base and derived objects, one particle and one ion
particle *particle_array[2];
particle_array[0] = new particle{2}; // He
particle_array[1] = new ion{1,2}; // He+
particle_array[0]->info(); // print info for particle
particle_array[1]->info(); // print info for ion
delete particle_array[0]; particle_array[0]=0;
delete particle_array[1]; particle_array[1]=0;
return 0;
}
|