Advertisement
Guest User

Untitled

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