问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C++类定义中的关键字public、protected、private的详细介绍

创作时间:
作者:
@小白创作中心

C++类定义中的关键字public、protected、private的详细介绍

引用
CSDN
1.
https://m.blog.csdn.net/wenhao_ir/article/details/145428506

在C++编程中,类成员的访问权限控制是实现封装和信息隐藏的重要机制。本文将详细介绍C++类定义中的关键字public、protected和private,包括它们在类成员和基类成员中的具体应用,帮助读者更好地理解和使用这些访问控制特性。

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

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

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

1.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 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.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;
    }
    

2. 总结对比

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

3. 使用建议

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

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

4. 定义一个类的基类中各成员的属性

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

继承方式有三种:

  1. public 继承
  • 基类的 public 成员在派生类中仍然是 public
  • 基类的 protected 成员在派生类中仍然是 protected
  • 基类的 private 成员在派生类中不可访问。
  • 这是最常用的继承方式,表示派生类“是一个”基类(is-a 关系)。
  1. protected 继承
  • 基类的 publicprotected 成员在派生类中都变为 protected
  • 基类的 private 成员在派生类中不可访问。
  • 这种继承方式较少使用,通常用于限制派生类的外部访问。
  1. private 继承
  • 基类的 publicprotected 成员在派生类中都变为 private
  • 基类的 private 成员在派生类中不可访问。
  • 这种继承方式表示派生类“根据基类实现”(implemented-in-terms-of 关系),而不是“是一个”基类。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号