ubit
tstclass.hpp
1 #include <iostream>
2 #include <string>
3 using namespace std;
4 
5 class Class {
6 public:
7  virtual ~Class() {}
8  virtual const char* getName() const {return "Class";}
9 };
10 
11 
12 class Obj {
13 public:
14  virtual ~Obj() {}
15  virtual Class& getClass() const = 0;
16  const char* getClassName() const {return getClass().getName();}
17 
18  virtual void print() const = 0;
19 };
20 
21 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
22 
23 extern class AClass& a;
24 
25 class A : public Obj {
26 public:
27  A(int _i = 0) : i(_i), j(0) {}
28  A(int _i, int _j) : i(_i), j(_j) {}
29 
30  virtual Class& getClass() const {return a;}
31  virtual void print() const {cout << "A: " << i << " j " << j << endl;}
32 
33 protected:
34  int i, j;
35 };
36 
37 class AClass : public Class {
38 public:
39  virtual const char* getName() const {return "A";}
40  virtual A& operator()(int i = 0) const {return *new A(i);}
41  virtual A& operator()(int i, int j) const {return *new A(i,j);}
42 };
43 
44 
45 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
46 
47 extern class BClass b;
48 
49 class B : public A {
50 public:
51  B(int _i = 0) : A(_i) {}
52 
53  virtual Class& getClass() const {return b;}
54  virtual void print() const {cout << "B: " << i << " x " << x << endl;}
55 
56 protected:
57  float x;
58 };
59 
60 class BClass : public Class {
61 public:
62  virtual const char* getName() const {return "B";}
63  virtual B& operator()(int i = 0) const {return *new B(i);}
64 };
65 
Definition: tstclass.hpp:49
Definition: tstclass.hpp:60
Definition: tstclass.hpp:25
Definition: tstclass.hpp:12
Definition: tstclass.hpp:37
Definition: tstclass.hpp:5