封装(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;
封装是面向对象编程的基础,它有助于将实现细节隐藏起来,只暴露出必要的接口,从而提高代码的可维护性和重用性。
作者:
hwaityd
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。