Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. /*Beispielprogramm: statischerDynamischerTyp.cpp
  2.  * Verwendungsbeispiel fuer Basisklassenzeiger.
  3.  * Was geht, was geht nicht.
  4.  * VL Programmierung 2, O. Henkel, HS Osnabrueck*/
  5.  
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. class B {
  10. public:
  11.   int x;
  12. };
  13.  
  14. class U : public B {
  15. public:
  16.   int y;
  17. };
  18.  
  19. void f(B*) {}
  20. void g(U*) {}
  21.  
  22. int main () {
  23.   B* pB;       // statischer Typ: B
  24.   B b;         // B-Objekt
  25.   U* pU;       // statischer Typ: U
  26.   U u;         // U-Objekt
  27.  
  28.   pB = &b;     // Bindung des Zeigers pB an B-Objekt
  29.   pB->x=1;     // Komponentenzugriff
  30.   f(pB);       // OK
  31.   //g(pB)      // nicht OK: falscher Parametertyp
  32.   cout << "pB=&b: " << pB->x << endl;
  33.  
  34.   pB = &u;     // Bindung des Zeigers pB an U-Objekt
  35.   pB->x=2;     // OK
  36.   //pB->y=3;   // nicht OK: y ist keine Komponente im statischen Typ B,
  37.                // d.h. der Compiler kann die Gueltigkeit des Ausdrucks nicht
  38.                // ueberpruefen
  39.   f(pB);       // OK
  40.   //g(pB)      // nicht OK: falscher (statischer) Parametertyp
  41.   cout << "pB=&u: " << pB->x << endl;
  42.  
  43.   pU = &u;     // Bindung des Zeigers pU an U-Objekt
  44.   pU->x=4;     // OK: Komponente x ist in Klasse U (geerbt) vorhanden
  45.   pU->y=5;     // OK: y ist nun im statischen Typ U von pU
  46.   f(pU);       // OK: Compiler akzeptiert ein U* fuer ein B*
  47.   g(pU);       // OK: richtiger Parametertyp
  48.   cout << "pU=&u: " << pU->x << "," << pU->y << endl;
  49.  
  50.   //pU = &b;   // nicht OK
  51.  
  52.   return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement