// PL8/polymorphicvarray.cpp
// Demonstrate how to use an array of baseclass pointers to achieve polymorphism
// Niels Walet, Last modified 06/01/2022
#include<iostream>
class particle
{
public:
virtual ~particle(){} // Need this!
virtual void info()=0; // pure virtual function
};
class electron : public particle
{
private:
int charge;
public:
electron() : charge{-1} {}
~electron() {std::cout<<"Electron destructor called"<<std::endl;}
void info() {std::cout<<"electron: charge="<<charge<<"e"<<std::endl;}
};
class ion : public particle
{
private:
int charge,atomic_number;
public:
// Note constructor short-hand!
ion(int q, int Z) : charge{q},atomic_number{Z} {}
~ion() {std::cout<<"Ion destructor called"<<std::endl;}
void info()
{
std::cout<<"ion: charge="<<charge
<<"e, atomic number="<<atomic_number<<std::endl;
}
};
int main()
{
// Array of 2 base class pointers
particle **particle_array = new particle*[2];
particle_array[0] = new ion{1,2};
particle_array[1] = new electron;
particle_array[0]->info(); // print info for electron
particle_array[1]->info(); // print info for ion
// clean-up
delete particle_array[0];
delete particle_array[1];
delete[] particle_array;
return 0;
}
|