《C++ Primer》上的一个有关问题
《C++ Primer》上的一个问题
《C++ Primer》第四版,483页讲私有继承时有这么一句话:
如果是私有继承(private inheritance),基类的所有成员在派生类中为private成员。
这句话应该错了吧?基类的private成员在派生类中,应该不可访问吧?那就不是private成员了吧?
------解决方案--------------------
不管什么继承,基类的private在派生类里都不能访问。
private继承只是将基类的public和protected变成了派生类的private,派生类依旧可以在自定义的public函数中访问基类原先的public和protected函数与变量。
------解决方案--------------------
无论何种继承方式,派生类都会包含基类的成员;
这与访问性无关。
具体来说:
1)基类的 private 成员,在派生类中依然存着,但派生类无法访问。
2)基类的 protected 成员,在派生类中存着,可访问;若 public / protected 继承,该类后续派生类可以访问,若 private 继承,该类的后续派生类无法访问。
------解决方案--------------------
private继承后,基类的成员在派生类中被转化,原本是private的成员变成了不可访问,public、protect的成员变成了private。派生类本身仍然能访问转化成private的成员,但派生类的对象是不可访问的。如果这个派生类继续被继承,不论何种形式继承都被转化为不可访问,就是说public、protected -> private ->不可访问。
简单来说只有原本是private的成员被继承后才是不可访问的,继承后转化为private的成员仍然是可以被派生类本身所访问,但不能被其对象所访问。
你的理解可能有点出入,书上写的并没有什么问题,再仔细看看好了。
《C++ Primer》第四版,483页讲私有继承时有这么一句话:
如果是私有继承(private inheritance),基类的所有成员在派生类中为private成员。
这句话应该错了吧?基类的private成员在派生类中,应该不可访问吧?那就不是private成员了吧?
------解决方案--------------------
不管什么继承,基类的private在派生类里都不能访问。
private继承只是将基类的public和protected变成了派生类的private,派生类依旧可以在自定义的public函数中访问基类原先的public和protected函数与变量。
------解决方案--------------------
无论何种继承方式,派生类都会包含基类的成员;
这与访问性无关。
具体来说:
1)基类的 private 成员,在派生类中依然存着,但派生类无法访问。
2)基类的 protected 成员,在派生类中存着,可访问;若 public / protected 继承,该类后续派生类可以访问,若 private 继承,该类的后续派生类无法访问。
------解决方案--------------------
private继承后,基类的成员在派生类中被转化,原本是private的成员变成了不可访问,public、protect的成员变成了private。派生类本身仍然能访问转化成private的成员,但派生类的对象是不可访问的。如果这个派生类继续被继承,不论何种形式继承都被转化为不可访问,就是说public、protected -> private ->不可访问。
简单来说只有原本是private的成员被继承后才是不可访问的,继承后转化为private的成员仍然是可以被派生类本身所访问,但不能被其对象所访问。
你的理解可能有点出入,书上写的并没有什么问题,再仔细看看好了。