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

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

封装

意义:1、将属性和行为作为一个整体,表现生活中的事物

     语法: class 类名{   访问权限:属性   /     行为    };

实例:设计一个圆类,求圆的周长

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //设计一个圆类,求圆的周长
  6. //圆周长公式:2 * pai * 半径
  7.  
  8. const double pai = 3.14; //圆周率
  9.  
  10. //class设计一个类,类后面紧跟着的就是类名称
  11. class Circle
  12. {
  13. public: //访问权限 公共权限
  14. int m_r; //属性 半径
  15. double calculateZC() //行为 获取圆的周长
  16. {
  17. return 2 * pai * m_r; //返回圆的周长
  18. }
  19. };
  20.  
  21. int main()
  22. {
  23. //实例化:通过一个类 创建一个对象的过程
  24. Circle c1; //通过圆类 创建具体的圆(对象)
  25. c1.m_r = 10; //给圆 对象 的 属性 赋值
  26.  
  27. cout << "圆的周长为:" << c1.calculateZC() << endl;
  28.  
  29. system("pause");
  30. return 0;
  31. }

实例2:创建一个学生类,属性为学号和姓名,可以给姓名学号赋值,可以显示学生的姓名和学号

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. class Student
  6. {
  7. public: //访问权限
  8. string m_Name; //属性
  9. int m_Id;
  10. void showStudent() //行为
  11. {
  12. cout << "姓名:" << m_Name <<" " << "学号:" << m_Id << endl;
  13. }
  14. };
  15.  
  16. int main()
  17. {
  18. //实例化:
  19. Student s1;
  20. s1.m_Name = "张三";
  21. s1.m_Id = 001;
  22. s1.showStudent();
  23.  
  24. Student s2;
  25. s2.m_Name = "李四";
  26. s2.m_Id = 002;
  27. s2.showStudent();
  28.  
  29. system("pause");
  30. return 0;
  31. }

    

    通过行为给属性赋值:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. class Student //类中的属性和行为称为:成员
  6. {
  7. public: //属性 又称:成员属性 成员变量
  8. string m_Name;
  9. int m_Id;
  10.  
  11. public: //行为 又称:成员函数 成员方法
  12. void showStudent()
  13. {
  14. cout << "姓名:" << m_Name <<" " << "学号:" << m_Id << endl;
  15. }
  16. //给姓名赋值
  17. void setName(string name)
  18. {
  19. m_Name = name;
  20. }
  21. //给学号赋值
  22. void setId(int id)
  23. {
  24. m_Id = id;
  25. }
  26. };
  27.  
  28. int main()
  29. {
  30. //实例化:
  31.  
  32. Student s1;
  33. //s1.m_Name = "张三";
  34. //s1.m_Id = 001;
  35. s1.setName("张三");
  36. s1.setId(1);
  37. s1.showStudent();
  38.  
  39. Student s2;
  40. //s2.m_Name = "李四";
  41. //s2.m_Id = 2;
  42. s2.setName("李四");
  43. s2.setId(2);
  44. s2.showStudent();
  45.  
  46. system("pause");
  47. return 0;
  48. }

      2、将属性和行为加以权限控制

      访问权限有三种:1、public-公共权限;2、protected-保护权限;3、private-私有权限;

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //访问权限
  6. //1、public-公共权限 成员 类内可以访问 类外也可以访问
  7. //2、protected-保护权限 成员 类内可以访问 类外不可以访问 子类可以访问父类保护权限内的内容
  8. //3、private-私有权限 成员 类内可以访问 类外不可以访问 子类无法访问父类私有权限内的内容
  9.  
  10. class Person
  11. {
  12. public:
  13. //公共权限
  14. string m_Name; //姓名
  15.  
  16. protected:
  17. //保护权限
  18. string m_Car; //车
  19.  
  20. private:
  21. //私有权限
  22. int m_Password; //银行卡密码
  23. public:
  24. void func()
  25. {
  26. m_Name = "张三";
  27. m_Car = "奔驰";
  28. m_Password = 123456;
  29. };
  30. };
  31.  
  32. int main()
  33. {
  34. //实例化具体对象
  35. Person p1;
  36.  
  37. p1.m_Name = "李四";
  38. //p1.m_Car = "拖拉机"; //保护权限内容,在类外访问不到
  39. //p1.m_Password = 123; //私有权限内容,在类外访问不到
  40.  
  41. p1.func();
  42.  
  43. system("pause");
  44. return 0;
  45. }

struct和class区别

    在C++中,struct的默认权限为公共,class的默认权限为私有。

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //class 和 struct 区别
  6.  
  7. class C1
  8. {
  9. int m_A; //默认是私有权限 private
  10. };
  11.  
  12. struct C2
  13. {
  14. int m_A; //默认是公共权限 public
  15. };
  16.  
  17. int main()
  18. {
  19. C1 c1;
  20. //c1.m_A = 100; //在class里默认的权限是私有权限 不可访问
  21.  
  22. C2 c2;
  23. c2.m_A = 100; //在struct里默认的权限是公共权限 可以访问
  24.  
  25. system("pause");
  26. return 0;
  27. }

成员属性设为私有

优点1、将所有成员属性设置为私有,可以自己控制读写权限

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //成员属性设为私有
  6.  
  7. //1、将所有成员属性设置为私有,可以自己控制读写权限
  8.  
  9. class Person
  10. {
  11. public:
  12. //写姓名 -> 设置姓名
  13. void setName(string name)
  14. {
  15. m_Name = name;
  16. }
  17. //读姓名 -> 获取姓名
  18. string getName()
  19. {
  20. return m_Name;
  21. }
  22.  
  23. //读年龄 -> 获取年龄
  24. int getAge()
  25. {
  26. m_Age = 0; //初始化为0岁
  27. return m_Age;
  28. }
  29.  
  30. //写情人 -> 设置情人
  31. void setLover(string lover)
  32. {
  33. m_Lover = "小泽玛丽亚";
  34. m_Lover = lover;
  35. }
  36.  
  37. private:
  38. //姓名 可读可写
  39. string m_Name;
  40. //年龄 只读
  41. int m_Age;
  42. //情人 只写
  43. string m_Lover;
  44. };
  45.  
  46. int main()
  47. {
  48. Person p;
  49. p.setName("张三");
  50. cout << "姓名为:" << p.getName() << endl;
  51.  
  52. //p.m_Age = 18; //不可写
  53. //p.setAge(18); //不可写
  54. cout << "年龄为:" << p.getAge() << endl;
  55.  
  56. p.setLover("仓井");
  57. //cout << "情人为:" << p.m_Lover << endl;
  58. //cout << "情人为:" << p.getLover << endl; //不可以访问
  59.  
  60. system("pause");
  61. return 0;
  62. }

优点2、对于写权限,我们可以检测数据的有效性

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //成员属性设为私有
  6.  
  7. //2、对于写权限,我们可以检测数据的有效性
  8.  
  9. class Person
  10. {
  11. public:
  12. //写姓名 -> 设置姓名
  13. void setName(string name)
  14. {
  15. m_Name = name;
  16. }
  17. //读姓名 -> 获取姓名
  18. string getName()
  19. {
  20. return m_Name;
  21. }
  22.  
  23. //读年龄 -> 获取年龄
  24. int getAge()
  25. {
  26. m_Age = 0; //初始化为0岁
  27. return m_Age;
  28. }
  29. //写年龄 -> 设置年龄
  30. void setAge(int age)
  31. {
  32. if (age < 0 || age >150)
  33. {
  34. cout << "年龄有误" << endl;
  35. return;
  36. }
  37. m_Age = age;
  38. }
  39.  
  40. //写情人 -> 设置情人
  41. void setLover(string lover)
  42. {
  43. m_Lover = "小泽玛丽亚";
  44. m_Lover = lover;
  45. }
  46.  
  47. private:
  48. //姓名 可读可写
  49. string m_Name;
  50. //年龄 可读可写
  51. int m_Age;
  52. //情人 只写
  53. string m_Lover;
  54. };
  55.  
  56. int main()
  57. {
  58. Person p;
  59. p.setName("张三");
  60. cout << "姓名为:" << p.getName() << endl;
  61.  
  62. //p.m_Age = 18;
  63. p.setAge(1000);
  64. cout << "年龄为:" << p.getAge() << endl;
  65.  
  66. p.setLover("仓井");
  67. //cout << "情人为:" << p.m_Lover << endl;
  68. //cout << "情人为:" << p.getLover << endl; //不可以访问
  69.  
  70. system("pause");
  71. return 0;
  72. }

C++核心编程 4 类和对象-封装的更多相关文章

  1. C++核心编程 4 类和对象-对象的初始化和清理

    构造函数和析构函数 对象的初始化和清理工作是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用结果是未知的,同样,使用完一个对象或变量,没有及时清理,也会造成一定的安全问题.C++利用了构 ...

  2. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

  3. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  4. java面向对象编程(类、对象)

    一.面向对象编程概述面向对象编程(Object  Oriented  Programming,缩写为OOP)是当今最流行的程序设计技术,它具有代码易于维护.可扩展性好和代码可常用等优点.面向对象的设计 ...

  5. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  6. ES6学习笔记(一):轻松搞懂面向对象编程、类和对象

    目录 面向过程编程P OP(Process oriented programming) 面向对象编程OOP(Object Oriented Programming) 总结 @ 面向过程编程P OP(P ...

  7. java面向对象编程(一)-类与对象

    1.问题的提出      张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小 ...

  8. Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

    1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成 ...

  9. Python核心编程--学习笔记--4--Python对象

    现在开始学习Python语言的核心部分.首先了解什么是Python对象,然后讨论最常用的内建类型,接下来讨论标准类型运算符和内建函数,之后给出对标准类型的不同分类方式,最后提一提Python目前还不支 ...

随机推荐

  1. 三大操作系统对比使用之·Windows10

    时间:2018-10-29 记录:byzqy 本篇是一篇个人对Windows系统使用习惯.技巧和应用推荐的文档,在此记录.分享和后续查询备忘. 打开终端: Win+R,调出"运行" ...

  2. Python中管理数据库

    前言:Python中是利用MySQL模块和数据库之间建立联系. MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL ...

  3. .NetCore 项目在服务器打包失败解决

    错误描述:NuGet警告 NU3037 NU3028 原因:Nuget无法访问到json所在的网络 2021年1月31日更新:更好的方法 把自动生成的Dockerfile内的AS build 替换成官 ...

  4. Docker详解(一)——

    Docker详解 https://www.cnblogs.com/antLaddie/p/14276726.html

  5. Robot Framework(10)- 使用资源文件

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 啥是资源文件 资 ...

  6. 内核软中断之tasklet机制

    1. 软中断IRQ简介 软中断(SoftIRQ)是内核提供的一种基于中断的延时机制, Linux内核定义的软中断有以下几种: enum { HI_SOFTIRQ=0, /*高优先级的tasklet*/ ...

  7. IDEA weblogic远程调试

    weblogic远程调试 这里我们使用vulhub的镜像作为初始构建镜像搭建漏洞环境 1. 搭建docker环境 新建一个目录,创建两个文件 DockerFile FROM vulhub/weblog ...

  8. Apache Dolphin Scheduler - Dockerfile 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  9. 【C++基础教程】第一课

    一,C++基础 1.1.什么是C++ C++是一种面向对象的编程语言,如今被广泛应用于各种行业. 1.2.C++的语法特点 一般C++的程序长成这个样子: #include<...> // ...

  10. Linux系列(31) - rpm命令管理之升级与卸载命令(3)

    升级命令 rpm -Uvh 包全名(要升级到的软件版本),如果没有安装这个软件的任何版本,这个命令可以代替rpm -ivh. rpm -Uvh 包全名 选项: - -U(upgrade):升级 卸载命 ...