C++ 中封装的含义和简单实现方式

yizhihongxing

封装是C++面向对象三大特性之一,用于隐藏对象的内部实现细节,从而保护数据的安全性和完整性,同时提供公共接口供外部调用。

C++中的封装可以通过类的访问权限控制实现。具体来说,可以使用public、private、protected关键字分别限制成员变量和成员函数的访问权限。

其中,public表示该成员可以被任何外部函数访问;private表示该成员只能被类的成员函数访问,不能被外部函数访问;protected表示该成员只能被类的成员函数和继承该类的子类中的成员函数访问。

下面是一个封装的简单实现示例:

class Person {
private:
    int age;   // 私有成员变量
public:
    void setAge(int newAge) {   // 公有成员函数
        if (newAge < 0) {   // 进行合法性判断
            cout << "Invalid age!" << endl;
            return;
        }
        age = newAge;
    }
    int getAge() const {   //读取私有成员变量
        return age;
    }
};

上述代码中,定义了一个Person类,其中age是私有成员变量,setAge和getAge是公有成员函数。setAge用于设置Person类的年龄age,并进行了合法性判断,getAge用于读取age值。由于age是私有成员变量,所以除了类内部的成员函数,外部函数是不能直接访问该值的。

再举一个简单实现的示例,假设我们有一个银行账户类Account,该类具有账户余额balance和密码password两个私有成员变量,以及查询余额getBalance、存钱deposit、取钱withdraw等三个公有成员函数:

class Account {
private:
    double balance;   // 私有成员变量
    string password;  // 私有成员变量
public:
    double getBalance() const {   // 公有成员函数,返回余额
        return balance;
    }
    void deposit(string pwd, double money) {   // 存钱函数
        if (pwd != password) {   // 判断密码是否正确
            cout << "Wrong password!" << endl;
            return;
        }
        balance += money;
        cout << "Deposit successfully!" << endl;
    }
    void withdraw(string pwd, double money) {   // 取钱函数
        if (pwd != password) {
            cout << "Wrong password!" << endl;
            return;
        }
        if (balance < money) {   // 判断余额是否充足
            cout << "Insufficient balance!" << endl;
            return;
        }
        balance -= money;
        cout << "Withdraw successfully!" << endl;
    }
};

上述代码中,余额和密码是私有成员变量,不能直接被外部函数访问,存钱和取钱函数在判断密码和余额充足性后才进行了操作。

总之,封装是C++面向对象编程中的重要特性,通过它可以保护数据安全、提高软件的可维护性和可重用性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 中封装的含义和简单实现方式 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 魔兽6.2酿酒武僧攻略 wow6.2武僧坦天赋雕文属性选择坦克手法

    魔兽6.2酿酒武僧攻略 一、坦克天赋选择 魔兽6.2版本中,酿酒武僧表现越来越优秀,并且成为了一个很好的坦克职业。选择合适的天赋至关重要。以下是酿酒武僧常用的坦克天赋选择: 黄色嵌槽:坚定;蓝色嵌槽:闪避; 特质:实心; 天赋选择:出拳入掌、抚掌醒神、醒心转盘。 出拳入掌和抚掌醒神能够使你对单体的威胁降到最低,同时增强你的生存能力。醒心转盘对于小怪群体非常友…

    other 2023年6月27日
    00
  • foreach中的index

    以下是详细讲解“foreach中的index的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: foreach中的index 在使用foreach循环时,有时需要获取当前循环的索引值。本攻略将介绍如何在foreach循环中获取索引值。 方法一:使用$index变量 可以使用$index变量来获取当前循环的索引值。可以使用以下示例代码在f…

    other 2023年5月10日
    00
  • springcloud学习(10)-利用springfox集成swagger

    SpringCloud学习(10) – 利用Springfox集成Swagger 在微服务架构中,服务的数量和复杂度都会增加,因此需要一种工具来帮助我们管理和测试这。Swagger是一种流行的API文档工具,可以帮助我们生成API文档测试API接口等。在SpringCloud中,我们可以使用fox集成Swagger来管理和测试我们的服务。 什么是Swagge…

    other 2023年5月7日
    00
  • PHP类继承 extends使用介绍

    PHP类继承是一种面向对象编程(OOP)中常用的技术,用于创建一个新类,它从一个现有类继承特征和方法。在PHP中,我们使用extends关键字来实现类的继承。以下是关于PHP类继承的详细攻略。 1. 继承的基本概念 1.1 父类和子类 在PHP中,一个类可以继承自另一个类。原始的类被称为基类或父类,而继承的类被称为子类。子类包含基类的所有属性和方法,同时可以…

    other 2023年6月27日
    00
  • PHP面向对象学习之parent::关键字

    父类和子类之间的关系是面向对象编程的常见概念,PHP中使用 extends 关键字来实现继承。在子类中,可以使用 parent 关键字来访问父类的属性和方法。parent:: 是一个特殊的关键字,通过它可以调用父类中的方法。 1. parent::关键字的基本用法 父类中的方法可以被子类继承,但子类也可能需要实现一些特殊的功能,这时需要调用父类中的方法。使用…

    other 2023年6月27日
    00
  • 简析Win8下虚拟内存的必要性

    简析Win8下虚拟内存的必要性攻略 什么是虚拟内存? 虚拟内存是计算机操作系统中的一种技术,它允许将硬盘空间用作内存的扩展,以便处理大量的数据和程序。在Windows 8操作系统中,虚拟内存的设置对于系统的性能和稳定性至关重要。 为什么需要虚拟内存? 扩展内存容量:虚拟内存允许系统使用硬盘空间作为额外的内存,从而扩展了计算机的可用内存容量。这对于那些需要同时…

    other 2023年8月1日
    00
  • C语言递归实现字符串逆序的方式详解

    C语言递归实现字符串逆序的方式详解 什么是递归 递归(Recursion)就是在程序执行时调用自身的编程技巧。递归函数就是能够直接或间接地调用自己的函数。 递归实现字符串逆序 我们可以通过递归实现字符串的逆序。具体思路是将最后一个字符与前面的字符逐个交换,直至所有字符都被交换。 下面是具体实现的代码: void reverse(char *str, int …

    other 2023年6月27日
    00
  • 微信小程序中的生命周期与生命周期函数浅析介绍

    微信小程序中的生命周期与生命周期函数浅析介绍 微信小程序是一种轻量级的应用程序,它有自己的生命周期和生命周期函数。在开发微信小程序时,熟悉它们的相关知识对于调试和性能优化非常有帮助。本文将深入解析小程序的生命周期和生命周期函数。 生命周期 小程序的生命周期是指从小程序启动到关闭或者被销毁的整个过程。小程序的生命周期可以分为以下三个阶段: 1. 应用生命周期 …

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部