在C++中,派生类(也称为子类)是从一个或多个基类(也称为父类或超类)继承属性和方法的类。通过继承,派生类可以复用基类的代码,同时添加或重写新的属性和方法。在定义派生类时,需要指定其继承的基类以及继承方式。继承方式决定了基类成员在派生类中的访问权限。
以下是派生类定义和访问权限的详细解释:
派生类的定义
派生类的定义语法如下:
class DerivedClassName : AccessSpecifier BaseClassName
{
// 派生类的成员变量和成员函数
};
DerivedClassName 是派生类的名称。
AccessSpecifier 是继承方式,可以是 public、protected 或 private。
BaseClassName 是基类的名称。
继承方式
public 继承
当使用 public 继承时,基类的 public 成员在派生类中仍然是 public 的,基类的 protected 成员在派生类中仍然是 protected 的,而基类的 private 成员在派生类中仍然是不可访问的。
class Base
{
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : public Base
{
public:
void accessMembers()
{
publicMember = 10; // 可以访问
protectedMember = 20; // 可以访问
// privateMember = 30; // 不可访问
}
};
protected 继承
当使用 protected 继承时,基类的 public 成员在派生类中变为 protected 的,基类的 protected 成员在派生类中仍然是 protected 的,而基类的 private 成员在派生类中仍然是不可访问的。
class Derived : protected Base
{
public:
void accessMembers()
{
// publicMember = 10; // 现在变为 protected,可以访问
protectedMember = 20; // 可以访问
// privateMember = 30; // 不可访问
}
};
class AnotherDerived : public Derived
{
public:
void anotherAccess()
{
// publicMember = 10; // 在 AnotherDerived 中,Base::publicMember 是 protected,可以访问
// protectedMember = 20;// 可以访问
// privateMember = 30; // 不可访问
}
};
private 继承
当使用 private 继承时,基类的 public 和 protected 成员在派生类中均变为 private 的,而基类的 private 成员在派生类中仍然是不可访问的。
class Derived : private Base
{
public:
void accessMembers()
{
// publicMember = 10; // 现在变为 private,可以访问(仅在 Derived 类的成员函数内部)
protectedMember = 20; // 可以访问(仅在 Derived 类的成员函数内部)
// privateMember = 30; // 不可访问
}
};
class AnotherDerived : public Derived
{
public:
void anotherAccess()
{
// publicMember = 10; // 在 AnotherDerived 中,Base::publicMember 是 private,不可访问
// protectedMember = 20;// 不可访问
// privateMember = 30; // 不可访问
}
};
访问权限总结
public 继承:保持基类的访问权限不变。
protected 继承:将基类的 public 成员降为 protected,其他保持不变。
private 继承:将基类的 public 和 protected 成员降为 private,其他保持不变。
通过合理地选择继承方式,可以精确控制基类成员在派生类中的访问权限,从而更好地设计类的层次结构。