hwaityd的小窝

Loading...

封装(Encapsulation)

封装是面向对象编程的核心概念之一,它允许将数据(属性)和操作这些数据的方法(行为)捆绑在一起,同时限制对数据的直接访问。

1. 类与对象

  • 概念:类是对象的蓝图或模板,定义了对象的属性和行为。对象是根据类创建的实例,每个对象拥有自己的数据和行为。
  • 语法
    class ClassName {
    public:
      // 公共成员
    private:
      // 私有成员
    };
    
    ClassName objectName; // 创建对象
    
  • 特点:类提供了一种将数据和行为封装在一起的方式,而对象则是类的具体实例。

示例代码

class Car {
public:
    void drive() {
        std::cout << "Car is driving" << std::endl;
    }
private:
    int speed;
};

Car myCar; // 创建Car类的对象
myCar.drive(); // 调用对象的行为

2. 类的语法体系

  • 概念:类的语法体系包括类的声明、成员函数的定义、构造函数、析构函数、以及类的成员变量和成员函数的访问修饰符。
  • 语法
    class ClassName {
    public:
      ClassName(); // 默认构造函数
      ~ClassName(); // 析构函数
      void memberFunction(); // 成员函数
      int memberVariable; // 成员变量
    private:
      int anotherMemberVariable; // 私有成员变量
    };
    
  • 特点:类的语法体系提供了一种结构化的方式来组织代码,使其更加模块化和易于管理。

3. 抽象的过程

  • 概念:抽象是简化复杂现实的机制,它隐藏了不必要的细节,只展示了必要的信息。
  • 语法:通过使用访问修饰符(如private)来隐藏类的内部实现细节。
  • 特点:抽象使得用户只需要关注对象的接口,而不需要了解其内部工作原理。

示例代码

class Clock {
private:
    int hour;
    int minute;

public:
    void setTime(int h, int m) {
        hour = h;
        minute = m;
    }

    void getTime() const {
        std::cout << "Hour: " << hour << ", Minute: " << minute << std::endl;
    }
};

Clock myClock;
myClock.setTime(10, 30);
myClock.getTime();

4. 封装过程

  • 概念:封装过程涉及将相关的数据和操作这些数据的方法组合在一起,并使用访问控制来保护数据。
  • 语法:通过将数据成员声明为private,将行为成员声明为public
  • 特点:封装提高了数据的安全性,防止了外部代码直接访问和修改内部数据。

5. 访问权限

  • 概念:访问权限控制了不同类成员的可见性和可访问性。
  • 语法
    • public:类的公共成员可以被任何对象访问。
    • private:类的私有成员只能被类的成员函数和友元函数访问。
    • protected:受保护的成员可以被类的对象、继承的子类及其友元访问。
  • 特点:通过控制访问权限,封装确保了对象的完整性和数据的安全性。

示例代码

class Account {
private:
    double balance; // 私有成员变量

public:
    Account(double initialBalance) : balance(initialBalance) {} // 构造函数

    void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    double getBalance() const {
        return balance; // 公有成员函数提供访问控制
    }
};

Account account(1000);
// account.balance = 500; // 错误:balance是私有成员
account.deposit(200);
std::cout << "Balance: " << account.getBalance() << std::endl;

封装是面向对象编程的基础,它有助于将实现细节隐藏起来,只暴露出必要的接口,从而提高代码的可维护性和重用性。

posted on 2024-10-20 00:27  hwaityd  阅读(1)  评论(0编辑  收藏  举报