C++_封装在class和struct的应用

在C++中,class 和 struct 都是用户自定义类型的机制,它们在功能上几乎完全相同,最大的区别在于默认的访问权限和默认的继承权限。理解这一点对于掌握封装在两者中的应用至关重要。
核心区别:默认访问权限

这是 class 和 struct 最根本的区别:

class:
    默认访问权限是 private。
    类内未明确指定访问修饰符的成员(变量和函数)默认为 private。
    这天然地支持封装,因为数据和实现细节被隐藏起来。

struct:
    默认访问权限是 public。
    结构体内未明确指定访问修饰符的成员默认为 public。
    这使得 struct 更像是一个简单的数据容器。

封装在 class 中的应用

class 是实现封装的首选和标准方式。

设计意图:class 的设计初衷就是面向对象编程,强调数据隐藏和行为抽象。
默认 private:成员变量通常声明为 private,外部无法直接访问。
提供公共接口:通过 public 的成员函数(如 getter/setter、操作方法)来安全地访问和修改内部数据。
示例:

    class Person {
        // 默认就是 private
        std::string name; // 外部无法直接访问
        int age;

    public:
        void setName(const std::string& n) {
            if (!n.empty()) name = n; // 可以加入验证逻辑
        }
        std::string getName() const { return name; }
        // ... 其他公共方法
    };

    // 使用
    Person p;
    // p.name = "Alice"; // 错误!name 是 private
    p.setName("Alice"); // 正确,通过公共接口

封装在 struct 中的应用

虽然 struct 默认是 public,但这并不意味着它不能实现封装。你完全可以像使用 class 一样,在 struct 中使用 private 和 public 关键字。

可以实现封装:

struct BankAccount {
    // 显式使用 private
private:
    std::string owner;
    double balance;

public:
    BankAccount(const std::string& o, double b) : owner(o), balance(b) {}
    void deposit(double amount) { /* 带验证的逻辑 */ }
    double getBalance() const { return balance; }
};

在这个例子中,BankAccount 结构体实现了完全的封装,与使用 class 定义没有区别。

传统用途:struct 通常用于表示纯数据结构(Plain Old Data, POD),即只包含数据成员,不包含复杂的行为或需要隐藏的状态。


    struct Point {
        double x; // 默认 public
        double y; // 默认 public
    };
    // 使用
    Point p;
    p.x = 1.0; // 直接访问,简单直接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值