Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

60 Zeilen
1.8KB

  1. #include <stdio.h>
  2. class A {
  3. public:
  4. void a() { printf("A::a()\n");};
  5. virtual void va() = 0;
  6. virtual void a(int n) { printf("A::a(int %d)\n", n); };
  7. private:
  8. void c() { printf("A::c()\n");};
  9. };
  10. class B : public A {
  11. public:
  12. void b() { printf("B::b()\n");};
  13. virtual void vb() {printf("B::vb()\n"); };
  14. void a(double d) {printf("B::a(double %f)\n", d); };
  15. void a(int i) {printf("B::a(int %d)\n", i); };
  16. virtual void va() {printf("B::va()\n"); };
  17. };
  18. class C : public B {
  19. public:
  20. virtual void c() {printf("C::c()\n"); };
  21. void a(float d) {printf("C::a(float %f)\n", d); };
  22. virtual void a() {printf("C::a()\n"); };
  23. virtual void va() {printf("C::va()\n"); };
  24. };
  25. int main() {
  26. // A a; A abstrakte Klasse
  27. B b;
  28. C c;
  29. A* pa=&b;
  30. B* pb=&c;
  31. float x = 1.2;
  32. pa->a(); // A::a()
  33. pa->va(); // B::va()
  34. pa->a(1); // B::a(int)
  35. // pa->c(); A::c() private, hier nicht sichtbar
  36. // pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht
  37. // pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht
  38. pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
  39. // pb->a(); pb ist vom Typ B*, hier ist A::a() überladen durch
  40. // entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht
  41. pb->va(); // C::va()
  42. pb->a(1); // B::a(int)
  43. // pb->c(); A::c() private, deswegen hier nicht sichtbar
  44. pb->b(); // B::b()
  45. pb->vb(); // B::vb()
  46. pb->a(x); // B::a(double)
  47. pa = &c;
  48. pa->a(); // A::a()
  49. pa->va(); // C::va()
  50. pa->a(1); // B::a(int)
  51. // pa->c(); A::c() private, hier nicht sichtbar
  52. // pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht
  53. // pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht
  54. pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
  55. }