对类所继承的成员的访问由基类中的成员访问级别和派生类派生列表中使用的访问标号共同控制。
派生类可以进一步限制但不能放松对所继承的成员的访问。
- public inheritance:基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
- protected inheritance:基类的public和protected成员在派生类中为protected。
- private inheritance:基类的所有成员在派生类中为private成员。
示例:
class Base
{
public:
void basemen(); // public member
protected:
int i; // protected member
// ...
};
struct Public_derived : public Base
{
int use_base() {return i;} // ok; derived classes can access i
// ...
};
struct Private_derived : private Base
{
int use_base() {return i;} // ok; derived classes can access i
};
Base b;
Public_derived d1;
Private_derived d2;
b.basemen(); // ok;
d1.basemen(); // ok; basemen is public in the derived class
d2.basemen(); // error; basemen is private in the derived class
struct Derived_from_Private : public Private_derived
{
// error; Base::i is private in Private_derived
int use_base() {return i;}
};
struct Derived_from_Public : public Public_derived
{
// ok; Base::i remains protected in Public_derived
int use_base() {return i};
};private inheritance:
- private继承是实现继承,不是接口继承;
- 如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象;
- private继承并不意味着is-a关系;
- private继承在软件设计层面上没有意义,其意义只及于软件实现层面;
class Base { };
class Derived : private Base { };
void test(Base* rhs){}
Base b;
Derived d;
test(&b); // ok;
test(&d); // error;
本文详细介绍了 C++ 中的类继承与成员访问控制机制,包括 public、protected 和 private 继承的区别及其对基类成员访问的影响。通过具体示例展示了不同继承方式下成员的可见性变化。
454

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



