开发者

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

目录
  •  一、访问权限(最核心区别)
  • 二、示例:类内、子类、外部访问
  • 三、继承时的访问级别变化
    • 举例:
  •  四、实际应用场景举例
    • 示例:封装与继承
  • 五、总结口诀
    • 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"; } // 子类能用
        prpythonivate:
            void think() { std::cout <<编程 "thinwww.devze.comk\n"; } // 仅自己能用
        };
        
        class Dog : public Animal {
        public:
            void run() {
                eat();      // ✅ 继承自public
                breathe();  // ✅ 继承自protected
                // think(); // ❌ 无法访问
            }
        };
        

        五、总结口诀

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

        口诀:

        public 人人能看,

        protected 儿孙能看,

        private 自家能看。

        protected 用来干嘛?

        用来让基类保留“对子类开放”的接口,而仍然对外部隐藏http://www.devze.com

        比如虚函数模板方法模式(Template Method)。

        在模板方法模式中,父类定义流程,子类填细节。

        控制继承范围:让子类访问内部工具函数。

        防止外部直接创建或销毁资http://www.devze.com源

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

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

        public / protected / private 继承的区别?

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

        总结

        到此这篇关于C++中protected,private,public三者区别的文章就介绍到这了,更多相关protected,private,public区别内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜