VasilM

oop_decorating_2

May 13th, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. using namespace std;
  4.  
  5. class Base {
  6. public:
  7.     virtual void show() = 0;
  8.     virtual ~Base() {}
  9. };
  10.  
  11. class Person: public Base {
  12.     char * name;
  13.     char * EGN;
  14. public:
  15.     Person(const char* nme, const char* egn) {
  16.         int n = strlen(nme)+1;
  17.         name = new char[n];
  18.         strcpy_s(name,n,nme);
  19.         n = strlen(egn)+1;
  20.         EGN = new char[n];
  21.         strcpy_s(EGN,n,egn);
  22.     }
  23.     ~Person() { delete [] name; delete [] EGN; }
  24.     void show() {
  25.         cout<< name << ", EGN:" << EGN << endl;
  26.     }
  27. };
  28.  
  29. class Student: public Base {
  30.     Base & obj;
  31.     char * vuz;
  32.     unsigned FNO;
  33. public:
  34.     Student(Base& obj, const char* uz, unsigned FNO): obj(obj), FNO(FNO) {
  35.         int n = strlen(uz)+1;
  36.         vuz = new char[n];
  37.         strcpy_s(vuz,n,uz);
  38.     }
  39.     void show() {
  40.         obj.show();
  41.         cout <<"\tStudent at " << vuz <<", F#"<< FNO << endl;
  42.     }
  43.     ~Student(){ delete [] vuz; }
  44. };
  45.  
  46. class Employee: public Base {
  47.     Base& obj;
  48.     char * job;
  49.     unsigned ENO;
  50. public:
  51.     Employee( Base& obj, const char * jb, unsigned ENO ): obj(obj), ENO(ENO) {
  52.         int n = strlen(jb)+1;
  53.         job = new char[n];
  54.         strcpy_s(job,n,jb);
  55.     }
  56.     ~Employee(){ delete [] job; }
  57.     void show() {
  58.         obj.show();
  59.         cout <<"\tEmployed at "<<job<<", S#"<<ENO<<endl;
  60.     }
  61. };
  62.  
  63. int main() {
  64.         setlocale(0,"");
  65.     Base& a = Person( "Иван Петров", "9012345678"),
  66.         & b = Student(a, "НБУ", 651234 ),
  67.         & c = Employee(b, "Мусала Софт ООД",5678),
  68.         & d = Employee(c, "Сухи пасти ЕООД", 523);
  69.     a.show();
  70.     b.show();
  71.     c.show();
  72.     d.show();
  73.  
  74.    
  75.     system("PAUSE");
  76.     return EXIT_SUCCESS;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment