在C++中,当我们谈论类的继承时,有三种基本的继承修饰符:public
、protected
和private
。这些修饰符决定了基类(父类)中的成员在派生类(子类)中的访问级别。以下是这三种继承修饰符的总结:
![图片[1]_C++中三种继承修饰符:public、protected、private的深入解析_知途无界](https://zhituwujie.com/wp-content/uploads/2024/05/d2b5ca33bd20240529122848.png)
1. public
继承
- 当使用
public
继承时,基类的public
和protected
成员在派生类中保持其原有的访问级别。 - 基类的
public
成员在派生类中仍然是public
的。 - 基类的
protected
成员在派生类中仍然是protected
的。 - 基类的
private
成员在派生类中是不可访问的。
示例:
class Base {public:void pubFunc() {}protected:void protFunc() {}private:void privFunc() {}};class Derived : public Base {public:void someFunc() {pubFunc(); // 可以访问protFunc(); // 可以访问// privFunc(); // 错误,不可访问}};class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : public Base { public: void someFunc() { pubFunc(); // 可以访问 protFunc(); // 可以访问 // privFunc(); // 错误,不可访问 } };class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : public Base { public: void someFunc() { pubFunc(); // 可以访问 protFunc(); // 可以访问 // privFunc(); // 错误,不可访问 } };
2. protected
继承
- 当使用
protected
继承时,基类的public
和protected
成员在派生类中变为protected
。 - 基类的
public
成员在派生类中变为protected
。 - 基类的
protected
成员在派生类中仍然是protected
的。 - 基类的
private
成员在派生类中仍然是不可访问的。
示例:
class Base {public:void pubFunc() {}protected:void protFunc() {}private:void privFunc() {}};class Derived : protected Base {public:void someFunc() {pubFunc(); // 可以访问,但在Derived外部不可访问protFunc(); // 可以访问,但在Derived外部不可访问// privFunc(); // 错误,不可访问}};class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : protected Base { public: void someFunc() { pubFunc(); // 可以访问,但在Derived外部不可访问 protFunc(); // 可以访问,但在Derived外部不可访问 // privFunc(); // 错误,不可访问 } };class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : protected Base { public: void someFunc() { pubFunc(); // 可以访问,但在Derived外部不可访问 protFunc(); // 可以访问,但在Derived外部不可访问 // privFunc(); // 错误,不可访问 } };
3. private
继承
- 当使用
private
继承时,基类的所有成员(public
、protected
和private
)在派生类中变为private
。 - 这意味着这些成员在派生类内部是可访问的,但在派生类外部是不可访问的。
- 这是一种比较少见的用法,因为它严格限制了基类成员的访问权限。
示例:
class Base {public:void pubFunc() {}protected:void protFunc() {}private:void privFunc() {}};class Derived : private Base {public:void someFunc() {pubFunc(); // 可以访问,但在Derived外部不可访问protFunc(); // 可以访问,但在Derived外部不可访问// privFunc(); // 错误,不可访问}};class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : private Base { public: void someFunc() { pubFunc(); // 可以访问,但在Derived外部不可访问 protFunc(); // 可以访问,但在Derived外部不可访问 // privFunc(); // 错误,不可访问 } };class Base { public: void pubFunc() {} protected: void protFunc() {} private: void privFunc() {} }; class Derived : private Base { public: void someFunc() { pubFunc(); // 可以访问,但在Derived外部不可访问 protFunc(); // 可以访问,但在Derived外部不可访问 // privFunc(); // 错误,不可访问 } };
在实际编程中,public
继承是最常见的,因为它保留了基类成员的访问级别,使得派生类可以像基类一样使用这些成员。而protected
和private
继承则用于特定的场景,例如当需要隐藏基类的实现细节或限制对基类成员的访问时。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
暂无评论内容