网站开发找公司好还是个人,平面设计有前景吗,和孕妇做网站,代充网站怎么做在C中#xff0c;封装#xff08;Encapsulation#xff09; 是面向对象编程的核心概念之一#xff0c;它通过类#xff08;Class#xff09;将数据#xff08;成员变量#xff09;和操作数据的函数#xff08;成员函数#xff09;捆绑在一起#xff0c;并使用访问修…在C中封装Encapsulation 是面向对象编程的核心概念之一它通过类Class将数据成员变量和操作数据的函数成员函数捆绑在一起并使用访问修饰符控制对这些成员的访问权限。以下是详细介绍
1. 类的定义
类是一种用户自定义数据类型封装了数据和行为。定义格式
class ClassName {// 访问修饰符public/protected/private成员变量;成员函数;
}; // 注意分号示例
class Rectangle {
private:int width; // 成员变量私有int height; // 成员变量私有public:// 构造函数Rectangle(int w, int h) : width(w), height(h) {}// 成员函数公有int getArea() { return width * height; }void setWidth(int w) { width w; }
};2. 成员变量与成员函数
成员变量属性
描述类的状态存储对象的数据。可在类内直接访问外部需通过公有成员函数访问封装特性。
成员函数方法
定义在类内部或外部需使用作用域解析运算符::。可访问和修改成员变量实现类的行为。
示例成员函数外部定义
class Rectangle {
private:int width, height;
public:Rectangle(int w, int h); // 声明构造函数int getArea(); // 声明成员函数
};// 构造函数的外部定义
Rectangle::Rectangle(int w, int h) : width(w), height(h) {}// 成员函数的外部定义
int Rectangle::getArea() { return width * height; }3. 访问修饰符
控制成员的访问权限实现数据隐藏和封装。
private私有成员
特点只能被类内部的成员函数访问外部无法直接访问。用途隐藏实现细节防止外部直接修改数据。
class Rectangle {
private:int width; // 私有成员变量void validateDimensions() { /* ... */ } // 私有工具函数
};public公有成员
特点可被类外部的任何代码访问。用途提供公共接口允许外部与对象交互。
class Rectangle {
public:int getWidth() { return width; } // 公有访问器void setWidth(int w) { // 公有修改器if (w 0) width w;}
};protected保护成员
特点只能被类内部、子类派生类访问外部无法访问。用途在继承体系中允许子类访问基类的特定成员。
class Shape {
protected:int color; // 子类可访问但外部不可访问
};class Rectangle : public Shape {
public:void setColor(int c) { color c; } // 子类可访问保护成员
};4. 封装的优势
数据隐藏防止外部直接修改内部数据提高安全性。接口与实现分离外部只需通过公有接口使用类无需关心内部实现。可维护性内部实现变化不会影响外部代码。
示例安全的数据访问
class BankAccount {
private:double balance; // 私有成员变量public:// 公有接口控制数据访问void deposit(double amount) {if (amount 0) balance amount;}bool withdraw(double amount) {if (amount 0 amount balance) {balance - amount;return true;}return false;}
};5. 访问修饰符的继承规则
子类继承基类时基类成员的访问权限可能被调整
基类成员继承方式子类中的访问权限publicpublicpublicpublicprivateprivateprotectedpublicprotectedprivate任何方式不可访问
示例
class Base {
public:int pub;
protected:int prot;
private:int priv;
};class Derived : public Base {
public:void test() {pub 1; // 可访问publicprot 2; // 可访问protected// priv 3; // 不可访问private}
};6. 友元函数与友元类
允许特定的外部函数或类访问私有/保护成员破坏封装性需谨慎使用。
示例友元函数
class Rectangle {
private:int width, height;friend int getPerimeter(Rectangle r); // 友元声明
};// 友元函数可访问私有成员
int getPerimeter(Rectangle r) {return 2 * (r.width r.height);
}总结
封装通过类和访问修饰符实现数据隐藏使代码更安全、更易维护。合理设计公有接口和私有实现是面向对象编程的关键。