C++/Class/Derived

Материал из C\C++ эксперт
Перейти к: навигация, поиск

A base pointer to access derived objects

<source lang="cpp">

  1. include <iostream>

using namespace std; class BaseClass {

 int i;

public:

 void setInt(int num) { 
   i = num; 
 }
 int getInt() { 
   return i; 
 }

}; class derived: public BaseClass {

 int j;

public:

 void setJ(int num) { 
    j = num; 
 }
 int getJ() { 
    return j; 
 }

}; int main() {

 BaseClass *bp;
 derived d;
 bp = &d;                   // BaseClass pointer points to derived object
                            // access derived object using BaseClass pointer
 bp->setInt(10);
 cout << bp->getInt() << " ";
 return 0;

}


 </source>


call constructor from parent for three level extending

<source lang="cpp">

  1. include <iostream>
  2. include <string.h>

using namespace std; class Base {

 public:
   Base(char *str) { strcpy(message, str); }; 
   void show_base(void) { cout << message << endl; };
 protected:  
   char message[256];

};

class Level1 : public Base {

 public:
   Level1(char *str, char *base) : Base(base) {
     strcpy(message, str);};
   void show_level1(void) { cout << message << endl; } ;
 protected:  
   char message[256];

}; class Lowest : public Level1 {

 public:
   Lowest(char *str, char *level1, char *base) :
     Level1(level1, base) { strcpy(message, str); };
   void show_lowest(void) 
 {
      show_base();
      show_level1();
      cout << message << endl; 
 };
 protected:
   char message[256];

}; int main(void) {

  Lowest bottom("L", "m", "e");
  
  bottom.show_lowest();

}


 </source>


Demonstrate pointer to derived class.

<source lang="cpp">

  1. include <iostream>

using namespace std; class BaseClass {

 int x;

public:

 void setx(int i) { 
    x = i; 
 }
 int getx() { 
    return x; 
 }

}; class DerivedClass : public BaseClass {

 int y;

public:

 void sety(int i) { 
    y = i; 
 }
 int gety() { 
    return y; 
 }

}; int main() {

 BaseClass *p;                               // pointer to BaseClass type
 BaseClass baseObject;                       // object of BaseClass
 DerivedClass derivedObject;                 // object of DerivedClass
 p = &baseObject;                            // use p to access BaseClass object
 p->setx(10);                                // access BaseClass object
 cout << "Base object x: " << p->getx() << "\n";
 p = &derivedObject;                         // point to DerivedClass object 
 p->setx(99);                                // access DerivedClass object
 
 derivedObject.sety(88);                     // can"t use p to set y, so do it directly
 cout << "Derived object x: " << p->getx() << "\n";
 cout << "Derived object y: " << derivedObject.gety() << "\n";
 return 0;

}



 </source>


how to pass arguments to the base classes of a derived class by modifying the preceding program

<source lang="cpp">

  1. include <iostream>

using namespace std; class X { protected:

 int a;  

public:

 X(int i);  

};

class Y { protected:

 int b;  

public:

 Y(int i);  

} ;

class Z : public X, public Y { public:

 Z(int x, int y);  
 int make_ab(void);  

} ;

X::X(int i) {

 a = i;  

}

Y::Y(int i) {

 b = i;  

}

Z::Z(int x, int y) : X(x), Y(y) {

 cout << "initializing\n";  

}

int Z::make_ab(void) {

 return a*b;  

}

main(void) {

 Z i(10, 20);  
    
 cout << i.make_ab();  
    
 return 0;  

}


 </source>


Simple class with its derived class

<source lang="cpp">

  1. include <iostream>
  2. include <cstring>

using namespace std; class mybase {

 char str[80];

public:

 mybase(char *s) { 
    strcpy(str, s); 
 }
 char *get() { 
    return str; 
 }

}; class myderived : public mybase {

 int len;

public:

 myderived(char *s) : mybase(s) {
   len = strlen(s);
 }
 int getlen() { 
   return len; 
 }
 void show() { 
   cout << get() << "\n"; 
 }

}; int main() {

 myderived ob("hello");
 ob.show();
 cout << ob.getlen() << "\n";

 return 0;

}



 </source>


Using pointers on derived class objects.

<source lang="cpp">

  1. include <iostream>
  2. include <string.h>

using namespace std; class B_class {

 char name[80];  

public:

 void put_name(char *s) {strcpy(name, s); }  
 void show_name(void) {cout << name << " ";}  

} ;

class D_class : public B_class {

 char phone_num[80];  

public:

 void put_phone(char *num) {  
   strcpy(phone_num, num);  
 }  
 void show_phone() {cout << phone_num << "\n";}  

};

main(void) {

 B_class *p;  
 B_class B_ob;  
    
 D_class *dp;  
 D_class D_ob;  
    
 p = &B_ob;
    
 p->put_name("Thomas Edison");  
    
 p = &D_ob;  
 p->put_name("Albert Einstein");  
    
 B_ob.show_name();  
 D_ob.show_name();  
 cout << "\n";  
    
 dp = &D_ob;  
 dp->put_phone("555 555-1234");  
 p->show_name();
 dp->show_phone();  
 return 0;  

}


 </source>