update ipi10

This commit is contained in:
2020-01-13 14:13:22 +01:00
parent cffcbdf06a
commit 27c2f60829
4 changed files with 135 additions and 56 deletions
+28 -26
View File
@@ -1,27 +1,29 @@
#include <stdio.h>
class A {
public:
void a() { };
void a() { printf("A::a()\n");};
virtual void va() = 0;
virtual void a(int n);
virtual void a(int n) { printf("A::a(int %d)\n", n); };
private:
void c() { };
void c() { printf("A::c()\n");};
};
class B : public A {
public:
void b() { };
virtual void vb();
void a(double d) { };
void a(int i) { };
virtual void va();
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"); };
};
class C : public B {
public:
virtual void c();
void a(float) { };
virtual void a();
virtual void va();
virtual void c() {printf("C::c()\n"); };
void a(float d) {printf("C::a(float %f)\n", d); };
virtual void a() {printf("C::a()\n"); };
virtual void va() {printf("C::va()\n"); };
};
int main() {
@@ -31,27 +33,27 @@ int main() {
A* pa=&b;
B* pb=&c;
float x = 1.2;
pa->a();
pa->va();
pa->a(1);
pa->a(); // A::a()
pa->va(); // B::va()
pa->a(1); // B::a(int)
// pa->c(); A::c() private, hier nicht sichtbar
// 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);
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
// entweder B::a(double) bzw. B::a(int) nicht durch B::a()
pb->va();
pb->a(1);
// entweder B::a(double) bzw. B::a(int), deswegen existiert B::a() nicht
pb->va(); // C::va()
pb->a(1); // B::a(int)
// pb->c(); A::c() private, deswegen hier nicht sichtbar
pb->b();
pb->vb();
pb->a(x);
pb->b(); // B::b()
pb->vb(); // B::vb()
pb->a(x); // B::a(double)
pa = &c;
pa->a();
pa->va();
pa->a(1);
pa->a(); // A::a()
pa->va(); // C::va()
pa->a(1); // B::a(int)
// pa->c(); A::c() private, hier nicht sichtbar
// pa->b(); pa ist vom Typ A*, kennt deswegen b() nicht
// pa->vb(); pa ist vom Typ A*, kennt deswegen vb() nicht
pa->a(x);
pa->a(x); // B::a(int), hier wird double x implizit zu int gecastet
}