公有继承(public inheritance)是继承的一种形式,其特点在于 基类的公有成员和保护成员在派生类中保持原有的状态,即它们的访问权限在派生类中不变。基类的私有成员,则仍然是私有的,派生类无法直接访问。这种继承方式保持了基类成员的访问级别,使得派生类可以访问基类的公有成员和保护成员,但不能访问基类的私有成员。
在公有继承中,如果派生类定义了成员函数,这些成员函数可以访问基类的公有成员和保护成员,但不能直接访问基类的私有成员。要访问基类的私有成员,必须通过基类提供的公有或保护成员函数。
公有继承通常用于实现“is-a”关系,即派生类是一种特殊的基类,它保留了基类的大部分特性,同时可能添加或修改一些特性。
```cpp
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
public:
Base() : publicMember(1), protectedMember(2), privateMember(3) {}
};
class Derived : public Base {
public:
void accessBaseMembers() {
// 可以直接访问基类的公有成员
publicMember = 10;
// 可以直接访问基类的保护成员
protectedMember = 20;
// 无法直接访问基类的私有成员
// privateMember = 30; // 这行代码会导致编译错误
}
};
int main() {
Derived d;
d.accessBaseMembers();
// d.privateMember = 30; // 这行代码会导致编译错误,因为privateMember是私有的
return 0;
}
```
在这个示例中,`Derived` 类通过公有继承从 `Base` 类继承成员,但无法直接访问 `Base` 类的私有成员 `privateMember`。