当前位置: 首页 > news >正文

[C++核心编程](四):类和对象——封装

目录

封装

访问权限

struct和class的区别

成员属性设置为私有

设计案例


C++面向对象的三大特性:封装、继承、多态

C++认为万事万物皆为对象,对象上有其属性和行为!!

封装

   意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制   语法:class 类名 { 访问权限 : 属性 / 行为} ;
#include <iostream>
using namespace std;const double PI = 3.14;
//设计一个圆类,求圆的周长   2 * PI * 半径class Cirle
{//访问权限
public://属性int m_R;//行为double calculate(){return 2 * PI * m_R;}
} ;int main(void)
{Cirle mcirle;mcirle.m_R = 10;cout << "圆周长:" << mcirle.calculate() << endl;return 0;
}

访问权限

权限关键词说明
公共权限public类内可以访问  类外可以访问
保护权限protected类内可以访问  类外不可以访问   子类可以访问父类
私有权限private类内可以访问  类外不可以访问  子类不能访问父类

struct和class的区别

        唯一区别:默认的访问权限不同,struct为公有,class为私有

成员属性设置为私有

   优点:

  • 自行控制读写权限
  • 对于写权限,可以检测数据的有效性

设计案例

#include <iostream>using namespace std;//立方体类(m_L m_H m_W),求出其面积和体积,分别用全局函数和成员函数判断两个立方体是否相等
class Cube
{
private:int m_L;int m_H;int m_W;
public:void set_cube_L(int Lvalue){m_L = Lvalue;}int get_cube_L(void){return m_L;}void set_cube_H(int Hvalue){m_H = Hvalue;}int get_cube_H(void){return m_H;}void set_cube_W(int Wvalue){m_W = Wvalue;}int get_cube_W(void){return m_W;}int calculate_S() //面积{return 2 * m_L * m_W + 2 * m_W * m_H + 2 * m_L * m_H;}int calculate_V() // 体积{return m_L * m_H * m_W;}void isSameByClass(Cube &c){if (get_cube_H() == c.get_cube_H() && get_cube_W() == c.get_cube_W() && get_cube_L() == c.get_cube_L()){cout << "成员函数判断:c1 and c2 相等" << endl;}else{cout << "成员函数判断:c1 and c2 不相等" << endl;}}
};//全局函数判断两个立方体是否相等
void isSame(Cube& c1, Cube& c2)
{if (c1.get_cube_H() == c2.get_cube_H() && c1.get_cube_W() == c2.get_cube_W() && c1.get_cube_L() == c2.get_cube_L()){cout << "全局函数判断:c1 and c2 相等" << endl;}else{cout << "全局函数判断:c1 and c2 不相等" << endl;}
}int main(void)
{Cube c1, c2;c1.set_cube_H(10);c1.set_cube_L(10);c1.set_cube_W(10);c2.set_cube_H(10);c2.set_cube_L(10);c2.set_cube_W(10);cout << "c1的面积是:" << c1.calculate_S() << endl;cout << "c1的体积是:" << c1.calculate_V() << endl;isSame(c1, c2);c1.isSameByClass(c2);system("pause");return 0;
}

推荐阅读:[C++核心编程](三):函数高级

相关文章:

  • 素皮材质的手机壳,如何才能做到经久耐用?
  • HTML5 CSS3 提高
  • vue组件中data为什么必须是一个函数
  • 【Flink精讲】Flink状态及Checkpoint调优
  • C语言-数据结构-顺序表
  • react useContext 用法
  • HP笔记本电脑如何恢复出厂设置?这里提供几种方法
  • 桥接模式(Bridge Pattern)
  • QT GUI编程常用控件学习
  • cesium相机视角跳转和缩放至entity方法汇总
  • redis的限流器都有哪些方式
  • 【kubernetes】关于k8s集群的声明式管理资源
  • 4核8G服务器并发数多少?性能如何?
  • MySQL-七种SQL优化
  • Spring篇----第十一篇
  • 深入了解以太坊
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 30天自制操作系统-2
  • Android优雅地处理按钮重复点击
  • angular学习第一篇-----环境搭建
  • Django 博客开发教程 8 - 博客文章详情页
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6--对象的扩展
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux Process Manage
  • Map集合、散列表、红黑树介绍
  • MD5加密原理解析及OC版原理实现
  • node 版本过低
  • Vue2 SSR 的优化之旅
  • vuex 笔记整理
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 程序员最讨厌的9句话,你可有补充?
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 翻译:Hystrix - How To Use
  • 分布式事物理论与实践
  • 设计模式(12)迭代器模式(讲解+应用)
  • 第二十章:异步和文件I/O.(二十三)
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​​​​​​​​Γ函数
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Java NIO(一)FileChannel
  • #stm32整理(一)flash读写
  • (30)数组元素和与数字和的绝对差
  • (7)STL算法之交换赋值
  • (C语言)球球大作战
  • (Ruby)Ubuntu12.04安装Rails环境
  • (第27天)Oracle 数据泵转换分区表
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)菜鸟学数据库(三)——存储过程
  • (转)创业的注意事项
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .net core使用RPC方式进行高效的HTTP服务访问