Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.0KB

  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. using A::a;
  13. void b() { printf("B::b()\n");};
  14. virtual void vb() {printf("B::vb()\n"); };
  15. void a(double d) {printf("B::a(double %f)\n", d); };
  16. void a(int i) {printf("B::a(int %d)\n", i); };
  17. virtual void va() {printf("B::va()\n"); };
  18. B operator+(int n);
  19. friend B operator+(int n, B& b);
  20. };
  21. B B::operator+(int n) {
  22. return *this;
  23. }
  24. B operator+(int n, B& b) {
  25. return b + n;
  26. }
  27. class C : public B {
  28. public:
  29. virtual void c() {printf("C::c()\n"); };
  30. void a(float d) {printf("C::a(float %f)\n", d); };
  31. virtual void a() {printf("C::a()\n"); };
  32. virtual void va() {printf("C::va()\n"); };
  33. };
  34. int main() {
  35. // A a; A abstrakte Klasse
  36. B b;
  37. B b2;
  38. C c;
  39. A* pa=&b;
  40. B* pb=&c;
  41. float x = 1.2;
  42. pa->a(); // A::a()
  43. pa->va(); // B::va()
  44. pa->a(1); // B::a(int)
  45. // pa->c(); A::c() private, hier nicht sichtbar
  46. // pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht
  47. // pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht
  48. pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
  49. pb->a(); //pb ist vom Typ B*, hier ist A::a() überladen durch
  50. // entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht
  51. pb->va(); // C::va()
  52. pb->a(1); // B::a(int)
  53. // pb->c(); A::c() private, deswegen hier nicht sichtbar
  54. pb->b(); // B::b()
  55. pb->vb(); // B::vb()
  56. pb->a(x); // B::a(double)
  57. pa = &c;
  58. pa->a(); // A::a()
  59. pa->va(); // C::va()
  60. pa->a(1); // B::a(int)
  61. // pa->c(); A::c() private, hier nicht sichtbar
  62. // pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht
  63. // pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht
  64. pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
  65. }