深入了解C++封闭类的定义与使用

 更新时间:2022年11月02日 08:47:41   作者:龙星尘  
一个类的成员变量如果是另一个类的对象,就称之为“成员对象”。包含成员对象的类叫封闭类(enclosed class)。本文主要和大家聊聊C++封闭类的使用,需要的可以参考一下

封闭类

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

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

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

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

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

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

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

轮胎类

#include<bits/stdc++.h>
using namespace std;
class CTyre{ //轮胎类 
  private:
    int redius; //半径
    int width;  //宽度或长度
    int height; //高度
  public:
  CTyre(){ //构造函数 
    redius=0,width=0,height=0; //赋值 
  } 
  ~CTyre(){ //析构函数 
    printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值 
  }
  /*
  ......  圆的体积 
  ......  圆的表面积 
  ......  等等 
  */
};

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

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

引擎类

#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎类 
  private:
    bool use; //是否正在使用
    bool good_bad; //这个引擎是好的还是坏的
    int parts; //零件的个数
    string production; //生产公司的名称
  public:
  CEngine(){ //构造函数初始化 
    use=false;
    good_bad=true;
    parts=10000; //一般汽车引擎就是这么多零件
    production="丰田汽车"; //目前世界上最大汽车公司 
  } 
  ~CEngine(){ //析构函数 
    cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
  }
  /*
  ......  这个引擎是否是好的 
  ......  这个引擎现在在使用吗? 
  ......  等等 
  */
};

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

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

汽车类

#include<bits/stdc++.h>
using namespace std;
class CCar{ //汽车类 
  private:
    int price; //汽车的价格 
    CTyre tyre; //汽车的轮胎 
    CEngine engine; //汽车的引擎
  public:
  CCar(int p){//构造函数 
    price=p; //赋值 
  } 
  ~CCar(){ //析构函数 
    printf("%d\n",price); //只用输出这个价格 
  }                         //因为轮胎和引擎类消亡后会自动使用祈构函数      
};

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

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

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

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

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

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

总代码

#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎类 
    private:
        bool use; //是否正在使用
        bool good_bad; //这个引擎是好的还是坏的
        int parts; //零件的个数
        string production; //生产公司的名称
    public:
    CEngine(){ //构造函数初始化 
        use=false;
        good_bad=true;
        parts=10000; //一般汽车引擎就是这么多零件
        production="丰田汽车"; //目前世界上最大汽车公司 
    } 
    ~CEngine(){ //析构函数 
        cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
    }
    /*
    ......  这个引擎是否是好的 
    ......  这个引擎现在在使用吗? 
    ......  等等 
    */
};
class CTyre{ //轮胎类 
    private:
        int redius; //半径
        int width;  //宽度或长度
        int height; //高度
    public:
    CTyre(){ //构造函数 
        redius=0,width=0,height=0; //赋值 
    } 
    ~CTyre(){ //析构函数 
        printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值 
    }
    /*
    ......  圆的体积 
    ......  圆的表面积 
    ......  等等 
    */
};
class CCar{ //汽车类 
    private:
        int price; //汽车的价格 
        CTyre tyre; //汽车的轮胎 
        CEngine engine; //汽车的引擎
    public:
    CCar(int p){//构造函数 
        price=p; //赋值 
    } 
    ~CCar(){ //析构函数 
        printf("%d\n",price); //只用输出这个价格 
    }                         //因为轮胎和引擎类消亡后会自动使用祈构函数      
};
int main(){
    CCar a(10000);
} 

程序输出:

到此这篇关于深入了解C++封闭类的定义与使用的文章就介绍到这了,更多相关C++封闭类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现扫雷经典游戏

    C语言实现扫雷经典游戏

    这篇文章主要为大家详细介绍了C语言实现扫雷经典游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 浅析C++字节对齐容易被忽略的两个问题

    浅析C++字节对齐容易被忽略的两个问题

    今天我就和大家分享一下C++字节对齐容易被忽略的两个问题。以下问题也是我实际开发工作中遇到的,如果有不同意见欢迎交流
    2013-07-07
  • c++11&14-多线程要点汇总

    c++11&14-多线程要点汇总

    这篇文章主要介绍了c++11&14-多线程的使用方法,文中代码非常详细,方便大家更好的参考和学习,感兴趣的朋友快来了解下
    2020-06-06
  • 详解C语言中strpbrk()函数的用法

    详解C语言中strpbrk()函数的用法

    这篇文章主要介绍了详解C语言中strpbrk()函数的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C 语言关于联合体的相关知识

    C 语言关于联合体的相关知识

    这篇文章主要介绍了C 语言关于联合体的相关知识,文中讲解非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
    2020-06-06
  • C++基础知识实例解析(一)

    C++基础知识实例解析(一)

    这篇文章主要对C++基础知识实例解析,通过四个简短的案例,巩固大家的基础知识,需要的朋友可以参考下
    2015-08-08
  • 解决 VSCode 编写 C++11 代码报红问题分析

    解决 VSCode 编写 C++11 代码报红问题分析

    今天在写 C++ 代码的时候用上 C++11 的特性,然后发现 VSCode 虽然可以编译通过,但是会在相应位置报红,这是怎么回事呢?下面小编给大家带来了解决方法,一起看看吧
    2021-09-09
  • C++实现八个常用的排序算法 插入排序、冒泡排序、选择排序、希尔排序等

    C++实现八个常用的排序算法 插入排序、冒泡排序、选择排序、希尔排序等

    这篇文章主要介绍了C++如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下
    2015-07-07
  • C++交换指针实例

    C++交换指针实例

    这篇文章主要介绍了C++交换指针实例,针对C与C++交换指针的方法进行了较为详细的对比分析,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C++封装静态链接库和使用的详细步骤

    C++封装静态链接库和使用的详细步骤

    这篇文章主要介绍了C++封装静态链接库和使用,本文描述了怎么去把一个C++程序封装成一个静态库并且如何去使用这些静态库,需要的朋友可以参考下
    2022-08-08

最新评论