-- Members.
+------------+----------------+--------------+
| type | superclass + subclass |
+------------+----------------+--------------+
| public | public | public |
| public | protected | protected |
| public | private | N/A |
+-------------+---------------+---------------+
| protected | public | protected |
| protected | protected | protected |
| protected | private | N/A |
+-------------+---------------+---------------+
| private | public | private |
| private | protected | private |
| private | private | N/A |
+------------------------------+---------------+
-- Convert from sub-class to super-class
#include <cstdlib>
#include <stdio.h>
#include <iostream>
using namespace std;
class A {
public:
int i;
};
class B : protected A { // public, protected, private
};
int main(int argc, char *argv[])
{
B *b = new B();
A * a = b; // It will have a compiler error, it can be fixed by define class B is inherited from class A as public type.
return 0;
}
The rule is: the conversion can work when there the super-class's public attribute can be accessed, i.e, when a->public_member(s) is readable; otherwise,
As for B, the super's member i is not accessable from out side since B is protected inherited from A, so if we can convert B to A, but the A's member i is defined as public, in other words, B's member i can be accessed through a pointer from class A; this is illegial with C++'s syntax.