C++中protected,private,public三者的区别详解

 更新时间:2025年10月28日 10:43:39   作者:狂奔的sherry  
这篇文章主要介绍了C++中protected,private,public三者区别的相关资料,C++ 中 public、private 和 protected 访问修饰符的主要区别在于它们对类成员的访问权限控制,文中通过代码介绍的非常详细,需要的朋友可以参考下

 一、访问权限(最核心区别)

访问限定符类内(成员函数)可访问派生类可访问类外(对象)可访问
public
protected
private

private 最封闭,protected 只对子类开放,public 对所有人开放。

二、示例:类内、子类、外部访问

#include <iostream>

class Base {
public:
    int pub = 1;          // 公开成员
protected:
    int prot = 2;         // 受保护成员
private:
    int priv = 3;         // 私有成员
};

class Derived : public Base {
public:
    void show() {
        std::cout << pub << "\n";   // ✅ 可访问
        std::cout << prot << "\n";  // ✅ 可访问(protected对子类可见)
        // std::cout << priv << "\n";  // ❌ 不可访问(private对子类隐藏)
    }
};

int main() {
    Base b;
    Derived d;

    std::cout << b.pub << "\n";     // ✅ public 对外可访问
    // std::cout << b.prot << "\n";  // ❌ protected 不可外部访问
    // std::cout << b.priv << "\n";  // ❌ private 不可外部访问
}

三、继承时的访问级别变化

继承时,父类成员会因为继承方式不同而改变可见性。

(⚠️ 这点容易混)

继承方式父类的 public 成员在子类中变成父类的 protected 成员在子类中变成父类的 private 成员
public 继承publicprotected不可访问
protected 继承protectedprotected不可访问
private 继承privateprivate不可访问

举例:

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Derived1 : public Base {};
class Derived2 : protected Base {};
class Derived3 : private Base {};
成员Derived1中访问级别Derived2中访问级别Derived3中访问级别
a(public)✅ public✅ protected✅ private
b(protected)✅ protected✅ protected✅ private
c(private)❌ 不可访问❌ 不可访问❌ 不可访问

 四、实际应用场景举例

关键字典型用法场景说明
public对外提供接口类的外部接口函数(如 getter/setter、API)
protected给子类继承用父类希望子类能访问但外部不能(模板方法、基类辅助函数)
private封装内部实现数据成员、工具函数,不希望外界访问

示例:封装与继承

class Animal {
public:
    void eat() { std::cout << "eat\n"; } // 公共接口
protected:
    void breathe() { std::cout << "breathe\n"; } // 子类能用
private:
    void think() { std::cout << "think\n"; } // 仅自己能用
};

class Dog : public Animal {
public:
    void run() {
        eat();      // ✅ 继承自public
        breathe();  // ✅ 继承自protected
        // think(); // ❌ 无法访问
    }
};

五、总结口诀

限定符谁能访问常用位置用途
public所有人类接口提供功能
protected自己 + 子类基类方法继承扩展
private仅自己数据成员封装隐藏

口诀:

public 人人能看,
protected 儿孙能看,
private 自家能看。

protected 用来干嘛?

用来让基类保留“对子类开放”的接口,而仍然对外部隐藏。
比如虚函数模板方法模式(Template Method)。

在模板方法模式中,父类定义流程,子类填细节。
控制继承范围:让子类访问内部工具函数。

防止外部直接创建或销毁资源

类之间的协作,如框架开发。

class Widget {
public:
    void draw();         // 对外接口
protected:
    virtual void paint(); // 由子类重写的绘制逻辑
};

public / protected / private 继承的区别?

影响的是基类成员在派生类中的访问级别,而不是继承数量。

总结

到此这篇关于C++中protected,private,public三者区别的文章就介绍到这了,更多相关protected,private,public区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现图书管理系统简易版

    C++实现图书管理系统简易版

    这篇文章主要为大家详细介绍了C++实现图书管理系统简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详解C++中的异常和错误处理机制

    详解C++中的异常和错误处理机制

    在C++编程中,异常处理和错误处理机制是非常重要的,它们可以帮助程序员有效地处理运行时错误和异常情况,本文就来介绍一下C++中的异常处理和错误处理机制吧
    2023-05-05
  • 解决C++中事件不响应的方法详解

    解决C++中事件不响应的方法详解

    本篇文章是对C++事件不响应的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 详谈c++11 final与override说明符

    详谈c++11 final与override说明符

    下面小编就为大家带来一篇详谈c++11 final与override说明符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C++实现假装蓝屏整蛊小程序

    C++实现假装蓝屏整蛊小程序

    因为工作的需要,有时候我们离开时并不想让别人看到我们电脑的内容,所以本文为大家分享了一个基于C++实现的假装蓝屏的小程序,需要的可以参考下
    2023-06-06
  • C++递归算法实例代码

    C++递归算法实例代码

    这篇文章主要介绍了C++递归算法实例代码,还是比较不错的,运用了递归算法解决相关问题,这里分享给大家,需要的朋友可以参考下。
    2017-11-11
  • C/C++ string.h库中memcpy()和memmove()的使用

    C/C++ string.h库中memcpy()和memmove()的使用

    memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中,本文主要介绍了C/C++ string.h库中memcpy()和memmove()的使用,感兴趣的可以了解一下
    2023-12-12
  • 详解C语言-二级指针三种内存模型

    详解C语言-二级指针三种内存模型

    这篇文章主要介绍了详解C语言-二级指针三种内存模型的相关知识,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 关于VS2022不能使用<bits/stdc++.h>的解决方案(万能头文件)

    关于VS2022不能使用<bits/stdc++.h>的解决方案(万能头文件)

    #include<bits/stdc++.h>包含了目前 C++ 所包含的所有头文件,又称万能头文件,那么如何在VS2022中使用万能头呢?下面小编给大家代理了关于VS2022不能使用<bits/stdc++.h>的解决方案(万能头文件),感兴趣的朋友一起看看吧
    2022-03-03
  • C语言大厂面试技巧及strcpy()函数示例详解

    C语言大厂面试技巧及strcpy()函数示例详解

    这篇文章主要为大家介绍了C语言面试技巧,以strcpy()函数为示例进行分析详解,有需要冲刺大厂的朋友们可以借鉴参考下,希望能够有所帮助
    2021-11-11

最新评论