-- 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.
本文探讨了C++中不同继承类型(public、protected 和 private)如何影响基类成员的可见性和子类到基类的对象转换。通过具体示例说明了在不同继承方式下,编译器如何处理子类到基类的转换。
1135

被折叠的 条评论
为什么被折叠?



