Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тестовые примеры / ch2 / virtual_base
.C // source module: virtual_base.C
#include <stream.h>
class base {
public:
int x;
base(int xa=0) : x(xa) { cerr << "base(" << xa << ") called\n"; };
virtual void print() { cerr << "x=" << x << "\n"; };
virtual ~base() { cerr << "~base() called\n"; }
};
class d1 : virtual public base {
public:
int y;
d1(int xa, int ya) : base(xa) {
cerr<<"d1("<<xa<<","<<ya<<") called\n"; y = ya;
};
~d1() { cerr << "~d1() called\n"; };
void print() { cerr << "y=" << y << "\n"; };
};
class d2 : virtual public base {
public:
int z;
d2(int xa, int za) : base(xa) {
cerr<<"d2("<<xa<<","<<za<<") called\n"; z = za;
};
~d2() { cerr << "~d2() called\n"; };
};
class derived : public d1, public d2 {
public:
int all;
derived(int a, int b, int c, int d) : base(a), d1(a,b), d2(a,c), all(d)
{ cerr << "derived(" << all << ") called\n"; };
void prints() { base::print(); cerr << "all=" << all << "\n"; };
};
int main() {
derived foo(1,2,3,4);
foo.prints();
return 0;
}