forked from hsf-training/cpluspluscourse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparticles.cpp
52 lines (48 loc) · 1.08 KB
/
particles.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <random>
#include <iostream>
#include <string>
class Particle
{
public :
Particle( double mass ) : mass_(mass) {}
double mass() const { return mass_ ; }
virtual std::string name() const { return "Particle" ; }
virtual ~Particle() {}
private :
Particle( const Particle & ) ; // non copiable
double mass_ ;
} ;
class ChargedParticle : public Particle
{
public :
ChargedParticle( double mass, double charge )
: Particle(mass), charge_(charge) {}
double charge() const { return charge_ ; }
virtual std::string name() const { return "ChargedParticle" ; }
private :
double charge_ ;
} ;
void print( Particle & p )
{
std::cout << p.name() << '\n' ;
std::cout << " mass = " << p.mass() << '\n' ;
}
int main()
{
std::default_random_engine e;
std::uniform_real_distribution d;
for ( int i = 0 ; i < 5 ; ++i )
{
if ( d(e) < 0.5 )
{
Particle p(2) ;
print(p) ;
}
else
{
ChargedParticle p(1,1) ;
print(p) ;
std::cout << " charge = " << p.charge() << '\n' ;
}
}
}