public继承
在公有继承(public inheritance)中,派生类继承了基类的公有成员和受保护成员,同时保持它们的原有访问权限。私有成员仍然对于派生类不可见。所以,如果你在派生类中使用了公有继承,那么基类的 privateVar
依然对派生类不可见,而 publicVar
和 protectedVar
会在派生类中保持其原有的访问权限。
以下是一个示例:
class BaseClass {
public:
int publicVar;
private:
int privateVar;
protected:
int protectedVar;
};
class DerivedClass : public BaseClass {
// publicVar 在此处依然是派生类的公有成员
// privateVar 对于派生类依然是不可见
// protectedVar 依然是派生类的受保护成员
};
在上述示例中,DerivedClass
通过公有继承继承了 BaseClass
的 publicVar
和 protectedVar
,但无法访问 privateVar
,因为它是私有的。
总结一下,公有继承保持了基类成员的访问权限,只有私有成员会对于派生类不可见。
privated继承
在私有继承(private inheritance)中,派生类会继承基类的成员,但所有继承的成员都会变为派生类的私有成员,不论它们在基类中的原始访问权限如何。这意味着在私有继承中,基类的公有成员、受保护成员和私有成员都会在派生类中变成私有成员,对外部代码都不可见。(更正,私有成员在派生类中仍然是不可见的)
以下是一个示例:
class BaseClass {
public:
int publicVar;
private:
int privateVar;
protected:
int protectedVar;
};
class DerivedClass : private BaseClass {
// publicVar, privateVar, protectedVar 在此处都变成了派生类的私有成员
// 更正,privateVar不能被访问
};
protected继承
在受保护继承(protected inheritance)中,派生类继承了基类的公有成员和受保护成员,但所有继承的成员都会变为派生类的受保护成员,无法被外部代码访问。私有成员仍然对于派生类不可见。(派生类及其派生类的子类可以访问这些成员)
class BaseClass {
public:
int publicVar;
private:
int privateVar;
protected:
int protectedVar;
};
class DerivedClass : protected BaseClass {
// publicVar, privateVar, protectedVar 在此处都变成了派生类的受保护成员
// privateVar不能被访问
};