//: C0:test300.cpp
// C++ exercise:
#include <iostream>
using namespace std;
namespace mysystem {
class Object{
public:
Object() {
cout << "This Object Construction!\n";
}
static void play(){
cout << "This is Object::play() " << i << "|" << endl;
}
virtual void print(){
cout << "This is Object::print()" << endl;
}
private:
static int i, j;
};
}
int mysystem::Object::i = 5;
namespace mysystem{
class A:public Object{
public:
virtual void Aprint(){
cout << "This is A::Aprint()" << endl;
}
void Aprint(int a) {
cout << "This is A::Aprint(int a)" << endl;
}
virtual void Aplay() = 0;
};
void func(A& i){
i.Aplay();
}
}
namespace mysystem {
class B:public A{
public:
void Aplay();
void Aprint();
void Aprint(int a);
};
}
void mysystem::B::Aplay(){
cout << "B::Aplay()" << endl;
}
void mysystem::B::Aprint(){
cout << "B::Aprint()" << endl;
cout << "#" << endl;
}
void mysystem::B::Aprint(int a){
cout << "B::Aprint(int a)" << endl;
cout << "$" << endl;
}
using namespace mysystem;
class C:public B{
public:
void Aprint(){
cout << "C::Aprint()" << endl;
}
void Aprint(int a){
cout << "C::Aprint()"<< endl;
}
};
struct D:public C{
void Aplay(){
cout << "D::Aplay()" << endl;
}
};
int main(){
Object::play();
Object obj;
obj.play();
obj.print();
B b;
b.Aplay();
b.Aprint();
b.Aprint(3);
B::play();
C c;
D d;
func(b);
func(c);
func(d);
}