#include
class B{
char a;
public:
char b;
protected:
char c;
};
// public inheritance
class D:public B{
// private members of B can't be accessed
//can access public and protected members of B
char d;
public:
void f(){
//can't do this
// d = a;
d = b; // works
d = c; // works
}
// class D has the following additional members inherited from B
// public: char b
// and
// protected: char c
// this means that any class derived from D can access both b and c
// b is accessible by objects of derived class, c is not (#1)
};
// private inheritance
class E:private B{
// private members of B can't be accessed...
// can access public and protected members of B
char d;
public:
void f(){
//can't do this
// d = a;
d = b; // works
d = c; // works
}
// class E has the following additional data members inherited from B
// private:char b
// and
// private: char c
// this means that any class derived from E can't access any of the above derived data
// members, nor are they accessible to objects of derived class, public functions
// though are accessible to objects of this class (#2)
};
// protected inheritance
class F:protected B{
// private members of B can't be accessed in this class as above, so
// can access public and protected members of B
char d;
public:
void f(){
//can't do this
// d = a;
d = b; // works
d = c; // works
}
// class F has following additional members inherited from B
// protected:char b
// and
// protected: char c
// this means that any class derived from F can access
// the above members, but they can't be accessed from
// derived class objects (#3)
};
class DF: public F{
char d;
public:
void g(){
d = b; // works from #3 above
d = c; // works from #3
}
};
int main(){
char i;
B b;
D d;
E e;
F f;
// these won't work by definition
// b.c = i;
// b.a = i;
// for object d of publicly derived class
// this works from (#1)
d.b = i;
// this won't work from (#1)
// d.c = i;
// for object e of privately derived class
// these won't work from (#2)
// e.b = i;
// e.c = i;
// for object f of protected-ly derived class
// these won't work from (#3)
// f.b = i;
// f.c = i;
return 0;
}