C++中三种继承修饰符:public、protected、private的深入解析

在C++中,当我们谈论类的继承时,有三种基本的继承修饰符:publicprotectedprivate。这些修饰符决定了基类(父类)中的成员在派生类(子类)中的访问级别。以下是这三种继承修饰符的总结:

图片[1]_C++中三种继承修饰符:public、protected、private的深入解析_知途无界

1. public 继承

  • 当使用public继承时,基类的publicprotected成员在派生类中保持其原有的访问级别。
  • 基类的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继承时,基类的publicprotected成员在派生类中变为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继承时,基类的所有成员(publicprotectedprivate)在派生类中变为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继承是最常见的,因为它保留了基类成员的访问级别,使得派生类可以像基类一样使用这些成员。而protectedprivate继承则用于特定的场景,例如当需要隐藏基类的实现细节或限制对基类成员的访问时。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞9 分享
The first step is as good as half over.
第一步是最关键的一步
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容