// 2.4: Funzioni virtuali
#include <iostream>
using namespace std;
// Superclasse
class Superclass {
private:
char nome[64];
public:
// metodi
virtual void method() {
cout << "method: Superclass: il mio nome e' " << nome << endl;
};
// costruttore
Superclass(const char *s) {
strcpy(nome, s);
};
};
class A : public Superclass {
private:
char nuovo[64];
public:
// metodi
void method() {
cout << "method: A: il mio nome e' " << nuovo << endl;
};
A(const char *s)
: Superclass("[costruito da A]") {
strcpy(nuovo, s);
}
};
class B : public Superclass {
private:
char nuovo[64];
public:
// metodi
void method() {
cout << "method: B: il mio nome e' " << nuovo << endl;
};
B(const char *s)
: Superclass("[costruito da B]") {
strcpy(nuovo, s);
}
};
class C : public Superclass {
private:
char nuovo[64];
public:
// metodi
void method() {
cout << "method: C: il mio nome e' " << nuovo << endl;
};
C(const char *s)
: Superclass("[costruito da C]") {
strcpy(nuovo, s);
}
};
class D : public C {
public:
D(const char *s)
: C(s) { };
};
class E : public Superclass {
public:
E(const char *s)
: Superclass(s) { };
};
int main() {
Superclass s("istanza S");
A a("istanza A");
B b("istanza B");
C c("istanza C");
D d("istanza D");
E e("istanza E");
Superclass *p; // Puntatore a Superclass
p = &s;
p->method();
p = &a;
p->method();
p = &b;
p->method();
p = &c;
p->method();
p = &d;
p->method();
p = &e;
p->method();
}