• C++封闭类


     封闭类:

    今天,我学习的是C++对象的一种操作.就是成员对象和封闭类.

      那么封闭类是什么呢?和普通类用什么不同吗?

      封闭类就是有成员对象的类,那么成员对象是什么呢?我们一起来看一下吧

      封闭类分为了轮胎类,引擎类,汽车类......我们可以将封闭类可以看作一个完整的汽车.

      那么汽车里面用哪些成员呢,肯定有轮胎对吧,还有引擎,窗户等等,那么轮胎有什么成员呢?有外层的橡胶,里面的金属,对吧.轮胎写成一个对象后,这个轮胎呢是汽车的一部分,而汽车也是一个对象,所以轮胎就是一个成员对象,而汽车呢因为包含了其他对象,就叫做封闭类.

      接下来,就可以开始写程序了.

      我们先写轮胎,轮胎的材质橡胶也可以写成一个对象,包含着橡胶的大小,尺存什么的.而我要给大家做一个最简单的例子,就不用写橡胶,金属什么的了!这个轮胎是一个圆对吧,圆肯定有半径吧,宽度/长度吧,还有高啊,都可以写进去:

    轮胎类:

    1. #include
    2. using namespace std;
    3. class CTyre{ //轮胎类
    4. private:
    5. int redius; //半径
    6. int width; //宽度或长度
    7. int height; //高度
    8. public:
    9. CTyre(){ //构造函数
    10. redius=0,width=0,height=0; //赋值
    11. }
    12. ~CTyre(){ //析构函数
    13. printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值
    14. }
    15. /*
    16. ...... 圆的体积
    17. ...... 圆的表面积
    18. ...... 等等
    19. */
    20. };

      这个就是我写的其中一个类,轮胎类,里面标注着轮胎的半径,长,高,还有构造函数和祈构函数,中间省略的部分可以写这种东西,这个轮胎的作用等等.

      写完了轮胎,还有什么呢?自然就是引擎了,引擎类里面需要有什么成员呢?首先我们要知道这个引擎是否是好的,还要知道这个引擎是不是开启的,还可以知道这个引擎里面的引擎个数,最后还可以看一下这个引擎的生产公司.

    引擎类:

    1. #include
    2. using namespace std;
    3. class CEngine{ //引擎类
    4. private:
    5. bool use; //是否正在使用
    6. bool good_bad; //这个引擎是好的还是坏的
    7. int parts; //零件的个数
    8. string production; //生产公司的名称
    9. public:
    10. CEngine(){ //构造函数初始化
    11. use=false;
    12. good_bad=true;
    13. parts=10000; //一般汽车引擎就是这么多零件
    14. production="丰田汽车"; //目前世界上最大汽车公司
    15. }
    16. ~CEngine(){ //析构函数
    17. cout<" "<" "<" "<
    18. }
    19. /*
    20. ...... 这个引擎是否是好的
    21. ...... 这个引擎现在在使用吗?
    22. ...... 等等
    23. */
    24. };

      除了引擎和轮胎,汽车肯定还要很多其他的重要部分,由于过于复杂,今天我们就只写这两个成员类.

      有了引擎和轮胎,就可以有汽车了,汽车里面有什么成员呢?首先,就是这个汽车的价格,然后才是是引擎和轮胎等各种成员类,注意一下,如果是一个成员类的话,构造函数用参数,在写成员类的时候是不需要加参数的:

    汽车类:

    1. #include
    2. using namespace std;
    3. class CCar{ //汽车类
    4. private:
    5. int price; //汽车的价格
    6. CTyre tyre; //汽车的轮胎
    7. CEngine engine; //汽车的引擎
    8. public:
    9. CCar(int p){//构造函数
    10. price=p; //赋值
    11. }
    12. ~CCar(){ //析构函数
    13. printf("%d\n",price); //只用输出这个价格
    14. } //因为轮胎和引擎类消亡后会自动使用祈构函数
    15. };

      这个CCar就是我们的封闭类了,里面有着引擎和轮胎两个成员对象.

      现在我讲一下写封闭类的注意事项:

    1.任何生成封闭类的语句,都要让编译器明白,对象中的成员对象,是如何进行初始化的.

    2.封闭类对象生成时,先执行所有对象成员的构造函数,然后才执行封闭类自己的构造函数.

    3.对象成员的构造函数调用次序和对象成员在类中的说明次序一致.

    4.和构造函数正好相反,当封闭类对象消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数.调用次序也和构造函数的调用次序相反.

    总代码:

    1. #include
    2. using namespace std;
    3. class CEngine{ //引擎类
    4. private:
    5. bool use; //是否正在使用
    6. bool good_bad; //这个引擎是好的还是坏的
    7. int parts; //零件的个数
    8. string production; //生产公司的名称
    9. public:
    10. CEngine(){ //构造函数初始化
    11. use=false;
    12. good_bad=true;
    13. parts=10000; //一般汽车引擎就是这么多零件
    14. production="丰田汽车"; //目前世界上最大汽车公司
    15. }
    16. ~CEngine(){ //析构函数
    17. cout<" "<" "<" "<
    18. }
    19. /*
    20. ...... 这个引擎是否是好的
    21. ...... 这个引擎现在在使用吗?
    22. ...... 等等
    23. */
    24. };
    25. class CTyre{ //轮胎类
    26. private:
    27. int redius; //半径
    28. int width; //宽度或长度
    29. int height; //高度
    30. public:
    31. CTyre(){ //构造函数
    32. redius=0,width=0,height=0; //赋值
    33. }
    34. ~CTyre(){ //析构函数
    35. printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值
    36. }
    37. /*
    38. ...... 圆的体积
    39. ...... 圆的表面积
    40. ...... 等等
    41. */
    42. };
    43. class CCar{ //汽车类
    44. private:
    45. int price; //汽车的价格
    46. CTyre tyre; //汽车的轮胎
    47. CEngine engine; //汽车的引擎
    48. public:
    49. CCar(int p){//构造函数
    50. price=p; //赋值
    51. }
    52. ~CCar(){ //析构函数
    53. printf("%d\n",price); //只用输出这个价格
    54. } //因为轮胎和引擎类消亡后会自动使用祈构函数
    55. };
    56. int main(){
    57. CCar a(10000);
    58. }

     程序输出:

    以上就是我今天学习的类了. 

  • 相关阅读:
    你知道Online DDL吗?
    如何有效管理公司分配给员工的个人微信,实现聚合聊天管理?
    红日靶场复现1
    AMBA总线相关知识记录
    Leetcode290. 单词规律
    WPF学习笔记-FlowDocument流文档基础知识和基本操作
    Linux 日志常用命令
    阿里并发核心编程宝典(2022版)
    打开量化投资的黑箱
    精品基于Uniapp+SSM实现的公园植物介绍APP
  • 原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127638588