| base-class-access/base-class-access-2.cc - Same as above - with answers. | Lecture 5 - slide 27 : 40 Program 3 |
// Program indended to illustrate and discuss the rules of polymorphism in C++
// when we make use of private and public base classes (with multiple inheritance).
// Answers in the next program - or per revealing of trailing comments.
#include <iostream>
#include <string>
using namespace std;
class B {
private:
int b;
public:
B(int b): b(b){}
void Bop(){
cout << "Bop()" << endl;
}
};
class C {
private:
int c;
public:
C(int c): c(c){}
void Cop(){
cout << "Cop()" << endl;
}
};
class D : private B, public C {
private:
int d;
public:
D(int b, int c, int d): B(b), C(c), d(d){}
};
// Which are legal? We care about the static types of x, y, z, v, and w. Reveal...
int f(){
B *x = new D(1,2,3); // Error: B is a private base. The D-object is not a B-object.
C *y = new D(1,2,3); // OK: C is a public base. The D-object is a C-object.
D *z = new D(1,2,3); // OK, of course.
D *v = new B(1); // Error: Against rules of polymorphism.
D *w = new C(1); // Error: Against rules of polymorphism.
}
int main(){
f();
}