派生类指针C/C++ codeclass BASE{public:}class Derived : private BASE//换成protected也一样{}int mai
派生类指针
- C/C++ code
class BASE{public:};class Derived : private BASE //换成protected也一样{};int main(){BASE *p = new Derived;//为什么派生类的指针不能给基类 }[解决办法]
因为派生类和基类的关系已经不再是一种 Derived is Base这样一种关系,private继承的关系更接近 Derived is implemented with Base ,Base 部分在派生类的访问权限已经不再是public了。所以你不能让基类类型的指针指向派生类对象
[解决办法]
[解决办法]
详见C++ primer 489
派生类到基类转换的可访问性
[解决办法]
- C/C++ code
BASE *p = static_cast(BASE *)new Derived;//为什么派生类的指针不能给基类
[解决办法]
protected继承说明你不想让基类被外面可见或访问。
当然就不许把自己转换为基类类型了。
[解决办法]
派生类对象里的基类部分已经是Private了,就算得到其基类部分的地址,在语义上也是属于派生类的private,是不允许直接使用的,所以编译器这样处理合情合理,不需要问为什么。
基类指针指向派生类对象是为了多态存在的,别异想开天的乱指,异想天开请用void*存地址,这个是最原始的C语言。
[解决办法]
- C/C++ code
class BASE{public: int a;};class Derived : public BASE //换成protected也一样{public: int b;}; 