|
- class A {
- public:
- void a() { };
- virtual void va() = 0;
- virtual void a(int n);
- private:
- void c() { };
- };
-
- class B : public A {
- public:
- void b() { };
- virtual void vb();
- void a(double d) { };
- void a(int i) { };
- virtual void va();
- };
-
- class C : public B {
- public:
- virtual void c();
- void a(float) { };
- virtual void a();
- virtual void va();
- };
-
- int main() {
- // A a; A abstrakte Klasse
- B b;
- C c;
- A* pa=&b;
- B* pb=&c;
- float x = 1.2;
- pa->a();
- pa->va();
- pa->a(1);
- // 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);
- // 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);
- // pb->c(); A::c() private, deswegen hier nicht sichtbar
- pb->b();
- pb->vb();
- pb->a(x);
- pa = &c;
- pa->a();
- pa->va();
- pa->a(1);
- // 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);
- }
|