This commit is contained in:
2020-11-06 17:52:10 +01:00
parent 6e9e162e3e
commit 2a6c90cd6a
3 changed files with 108 additions and 1 deletions
+13 -1
View File
@@ -11,13 +11,24 @@ class A {
class B : public A {
public:
using A::a;
void b() { printf("B::b()\n");};
virtual void vb() {printf("B::vb()\n"); };
void a(double d) {printf("B::a(double %f)\n", d); };
void a(int i) {printf("B::a(int %d)\n", i); };
virtual void va() {printf("B::va()\n"); };
B operator+(int n);
friend B operator+(int n, B& b);
};
B B::operator+(int n) {
return *this;
}
B operator+(int n, B& b) {
return b + n;
}
class C : public B {
public:
virtual void c() {printf("C::c()\n"); };
@@ -29,6 +40,7 @@ class C : public B {
int main() {
// A a; A abstrakte Klasse
B b;
B b2;
C c;
A* pa=&b;
B* pb=&c;
@@ -40,7 +52,7 @@ int main() {
// pa->b(); pa ist vom Typ A* und kennt deswegen b() nicht
// pa->vb(); pa ist vom Typ A* und kennt deswegen vb() nicht
pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
// pb->a(); pb ist vom Typ B*, hier ist A::a() überladen durch
pb->a(); //pb ist vom Typ B*, hier ist A::a() überladen durch
// entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht
pb->va(); // C::va()
pb->a(1); // B::a(int)