首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++类定义中的关键字public 、protected 、private的详细介绍【定义类成员的访问权限属性和基类的成员的访问权限属性】

  • 25-03-05 03:40
  • 2752
  • 10688
blog.csdn.net

目录

  • 01-定义类成员的访问权限属性:public 、protected 、private
    • 1. **`public` 成员**
    • 2. **`protected` 成员**
    • 3. **`private` 成员**
    • 总结对比
    • 使用建议
  • 02-定义一个类的基类中各成员的属性

01-定义类成员的访问权限属性:public 、protected 、private

C++类的成员有三种属性,分别是public 、protected 、private ,请分别介绍下。

在C++中,类的成员(包括数据成员和成员函数)可以具有三种访问权限:public、protected 和 private。这些访问权限决定了类成员在类内部、派生类以及类外部的可见性和可访问性。


1. public 成员

  • 访问权限:
    • 在类内部可以访问。
    • 在派生类中可以访问。
    • 在类外部(通过对象)可以访问。
  • 用途:
    • 用于定义类的接口,即类对外提供的功能。
    • 通常将成员函数(尤其是类的构造函数和公共方法)声明为 public,以便外部代码可以调用。
  • 示例:
    class MyClass {
    public:
        int publicVar;  // 公有成员变量
        void publicFunc() {  // 公有成员函数
            std::cout << "Public Function\n";
        }
    };
    
    int main() {
        MyClass obj;
        obj.publicVar = 10;       // 可以直接访问
        obj.publicFunc();         // 可以直接调用
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

2. protected 成员

  • 访问权限:
    • 在类内部可以访问。
    • 在派生类中可以访问。
    • 在类外部(通过对象)不能访问。
  • 用途:
    • 用于定义类的实现细节,这些细节需要被派生类继承和使用,但不希望暴露给外部代码。
    • 通常将需要被派生类访问的成员变量或成员函数声明为 protected。
  • 示例:
    class Base {
    protected:
        int protectedVar;  // 受保护成员变量
    };
    
    class Derived : public Base {
    public:
        void accessProtected() {
            protectedVar = 20;  // 可以在派生类中访问
        }
    };
    
    int main() {
        Derived obj;
        // obj.protectedVar = 30;  // 错误:不能在类外部访问 protected 成员
        obj.accessProtected();    // 可以通过公有方法间接访问
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

3. private 成员

  • 访问权限:
    • 在类内部可以访问。
    • 在派生类中不能访问。
    • 在类外部(通过对象)不能访问。
  • 用途:
    • 用于隐藏类的实现细节,确保这些细节不会被外部代码或派生类直接访问或修改。
    • 通常将类的内部状态或辅助函数声明为 private。
  • 示例:
    class MyClass {
    private:
        int privateVar;  // 私有成员变量
        void privateFunc() {  // 私有成员函数
            std::cout << "Private Function\n";
        }
    public:
        void setPrivateVar(int value) {
            privateVar = value;  // 可以在类内部访问私有成员
            privateFunc();       // 可以在类内部调用私有函数
        }
    };
    
    int main() {
        MyClass obj;
        // obj.privateVar = 10;  // 错误:不能在类外部访问 private 成员
        // obj.privateFunc();    // 错误:不能在类外部调用 private 函数
        obj.setPrivateVar(10);   // 可以通过公有方法间接访问
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

总结对比

访问权限类内部派生类类外部
public✔️✔️✔️
protected✔️✔️❌
private✔️❌❌

使用建议

  1. public:用于定义类的接口,供外部代码使用。
  2. protected:用于定义类的实现细节,供派生类使用。
  3. private:用于隐藏类的内部实现,确保封装性。

通过合理使用这三种访问权限,可以实现良好的封装性和代码的可维护性。

02-定义一个类的基类中各成员的属性

在C++中,public Base中的public关键字表示继承方式,具体来说,它决定了基类(Base)中的成员在派生类(Derived)中的访问权限。

继承方式有三种:

  1. public 继承:

    • 基类的 public 成员在派生类中仍然是 public。
    • 基类的 protected 成员在派生类中仍然是 protected。
    • 基类的 private 成员在派生类中不可访问。
    • 这是最常用的继承方式,表示派生类“是一个”基类(is-a 关系)。
  2. protected 继承:

    • 基类的 public 和 protected 成员在派生类中都变为 protected。
    • 基类的 private 成员在派生类中不可访问。
    • 这种继承方式较少使用,通常用于限制派生类的外部访问。
  3. private 继承:

    • 基类的 public 和 protected 成员在派生类中都变为 private。
    • 基类的 private 成员在派生类中不可访问。
    • 这种继承方式表示派生类“根据基类实现”(implemented-in-terms-of 关系),而不是“是一个”基类。
昊虹嵌入式技术交流群
QQ群名片
注:本文转载自blog.csdn.net的昊虹AI笔记的文章"https://blog.csdn.net/wenhao_ir/article/details/145428506"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top