来源链接

实验四(下)

代码

#include <iostream>
using namespace std;

enum CPU_Rank {P1 = 1, P2, P3, P4, P5, P6, P7};
class CPU {
private:
    CPU_Rank rank;
    int frequency;
    float voltage;

public:
    CPU(CPU_Rank r, int f, float v) {
        rank = r;
        frequency = f;
        voltage = v;
        cout << "构造了一个CPU!" << endl;
    }

    CPU(CPU &c) {
        rank = c.rank;
        frequency = c.frequency;
        voltage = c.voltage;

        cout << "拷贝构造了一个CPU!" << endl;
    }

    ~CPU() {
        cout << "析构了一个CPU!" << endl;
    }

    CPU_Rank GetRank() const { return rank; }
    int GetFrequency() const { return frequency; }
    float GetVoltage() const { return voltage; }

    void SetRank(CPU_Rank r) { rank = r; }
    void SetFrequecy(int f) { frequency = f; }
    void SetVoltage(float v) { voltage = v; }

    void Run() { cout << "CPU开始运行!" << endl; }
    void Stop() { cout << "CPU停止运行!" << endl; }
};

enum RAM_Type{DDR2 = 2, DDR3, DDR4};
class RAM {
private:
    enum RAM_Type type;
    unsigned int frequency;
    unsigned int size;

public:
    RAM(RAM_Type t, unsigned int f, unsigned int s) {
        type = t;
        frequency = f;
        size = s;
        cout << "构造了一个RAM!" << endl;
    }

    RAM(RAM &r) {
        type = r.type;
        frequency = r.frequency;
        size = r.size;

        cout << "拷贝构造了一个RAM!" << endl;
    }

    ~RAM() { cout << "析构了一个RAM!" << endl; }

    RAM_Type GetType() const { return type; }
    unsigned int GetFrequency() const { return frequency; }
    unsigned int GetSize() const { return size; }

    void SetType(RAM_Type t) { type = t; }
    void SetFrequency(unsigned int f) { frequency = f; }
    void SetSize(unsigned int s) { size = s; }

    void Run() { cout << "RAM开始运行!" << endl; }
    void Stop() { cout << "RAM停止运行!" << endl; }
};

enum CDROM_Interface {SATA, USB};
enum CDROM_Install_type {external, built_in};
class CD_ROM {
private:
    enum CDROM_Interface interface_type;
    unsigned int cache_size;
    CDROM_Install_type install_type;

public:
    CD_ROM(CDROM_Interface i, unsigned int s, CDROM_Install_type it) {
        interface_type = i;
        cache_size = s;
        install_type = it;
        cout << "构造了一个CD_ROM!" << endl;
    }

    CD_ROM(CD_ROM &cd) {
        interface_type = cd.interface_type;
        cache_size = cd.cache_size;
        install_type = cd.install_type;

        cout << "拷贝构造了一个CD_ROM!" << endl;
    }

    ~CD_ROM() { cout << "析构了一个CD_ROM!" << endl; }

    CDROM_Interface GetInterfaceType() const { return interface_type; }
    unsigned int GetSize() const { return cache_size; }
    CDROM_Install_type GetInstallType() const { return install_type; }

    void SetInterfaceType(CDROM_Interface i) { interface_type = i; }
    void SetSize(unsigned int s) { cache_size = s; }
    void SetInstallType(CDROM_Install_type it) { install_type = it; }

    void Run() { cout << "CD_ROM开始运行!" << endl; }
    void Stop() { cout << "CD_ROM停止运行!" << endl; }
};

class COMPUTER {
private:
    CPU my_cpu;
    RAM my_ram;
    CD_ROM my_cdrom;
    unsigned int storage_size; //GB
    unsigned int bandwidth; //MB

public:
    COMPUTER(CPU c, RAM r, CD_ROM cd, unsigned int s, unsigned int b);
    ~COMPUTER() { cout << "析构了一个COMPUTOR!" << endl; }

    void Run() {
        my_cpu.Run();
        my_ram.Run();
        my_cdrom.Run();
        cout << "COMPUTER开始运行!" << endl;
    }

    void Stop() {
        my_cpu.Stop();
        my_ram.Stop();
        my_cdrom.Stop();
        cout << "COMPUTER停止运行!" << endl;
    }
};

COMPUTER::COMPUTER(CPU c, RAM r, CD_ROM cd, unsigned int s, unsigned int b):my_cpu(c), my_ram(r), my_cdrom(cd) {
    storage_size = s;
    bandwidth = b;

    cout << "构造了一个COMPUTER!" << endl;
}

int main() {
    CPU a(P6, 300, 2.8);
    a.Run();
    a.Stop();
    cout << "*************************\n";

    RAM b(DDR3, 1600, 8);
    b.Run();
    b.Stop();
    cout << "*************************\n";

    CD_ROM c(SATA, 2, built_in);
    c.Run();
    c.Stop();
    cout << "*************************\n";

    COMPUTER my_computer(a, b, c, 128, 10);
    cout << "*************************\n";

    my_computer.Run();
    my_computer.Stop();
    cout << "*************************\n";

    return 0;
}

控制台输出

说明:macOS+CLion

注:

海蓝色的线对应形实结合的拷贝构造与析构;

黄色的线对应初始化列表的拷贝构造与析构。

c++有关构造函数、析构函数和类的组合的一个简单例子的更多相关文章

  1. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  2. php 类与对象 面向对象编程 简单例子

    <?php class Foo { //类 名称为Foo public $aMemberVar = 'aMemberVar Member Variable'; //类变量 public $aFu ...

  3. C++类和对象的一个简单的实例

    题目:找出一个整形数组中的元素的最大值 下面,我们用类和对象的方法来做. #include<iostream> using namespace std; class Array_max{ ...

  4. c++类的基本形式(一个简单类的简单sample,命名空间)

    有人把类说成是占用固定大小内存块的别名,其定义时不占用空间 #include<iostream> #include<string> using namespace std; c ...

  5. 分享一个简单的C#的通用DbHelper类(支持数据连接池)

    每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 <connectionStrings> <add ...

  6. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  7. c++基础语法 构造函数 析构函数 类的组合

    1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...

  8. C++ 中的类构造函数 & 析构函数

    类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可用于为某些成员变量设置 ...

  9. c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

    每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A ...

随机推荐

  1. User root is not allowed to impersonate anonymous

    User root is not allowed to impersonate anonymous ava.lang.RuntimeException: org.apache.hadoop.ipc.R ...

  2. C#中的委托(delegate)(个人整理)

    Delegate 一.什么是委托? 委托是一种引用类型,它是函数指针的托管版本.在C#中,委托是一种可以把引用存储为函数的类型.委托可以引用实例和静态方法,而函数指针只能引用静态方法.委托的声明非常类 ...

  3. Logistic回归计算过程的推导

    https://blog.csdn.net/ligang_csdn/article/details/53838743 https://blog.csdn.net/weixin_30014549/art ...

  4. Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)

    网上关于消息队列技术原理说明的详细文档很多,但涉及到Delphi的具体实现很少,这是我从网上找了一上午的资料,自己整合和尝试的能运行的程序. 打开控制面板->程序->添加组件,添加消息队列 ...

  5. Log4j介绍与使用

    Log4j三大组件 1) 日志记录器Logger负责输出日志信息,并能够对日志信息进行分类筛选,决定哪些日志信息应该被输出,哪些该被忽略.Loggers组件输出日志信息时分为5个级别:DEBUG.IN ...

  6. SDK?JDK?JDK 下载、安装、配置图文教程

    什么是软件开发工具包(SDK)   开发一个软件,需要经过编辑.编译.调试.运行几个过程. 编辑:使用编程语言编写程序代码的过程. 编译:如上一节所讲,就是将编写的程序进行翻译. 调试:程序不可能一次 ...

  7. An owner of this repository has limited the ability to open a pull request to users that are collaborators on this repository.

    git 无法发起:pull request,提示:An owner of this repository has limited the ability to open a pull request ...

  8. Hive中常用的参数配置

    -- 查看当前环境参数配置set -v;-- 重置配置为默认值reset; -- 调整map数-- input的文件大小,集群设置的文件块大小,hive中通过set dfs.block.size;命令 ...

  9. virtualenv的使用

    virtualenv 是一个创建隔绝的Python环境的工具.在向服务器导入第三方库的时候特别有用. 1.首先,安装virtualenv pip install virtualenv 2.创建一个虚拟 ...

  10. Python中的7种可调用对象

    Python中有七种可调用对象,可调用对象可使用内置函数callable来检测 一.用户自定义的函数: 使用def语句或者lambda表达式创建的函数. 二.内置函数: 使用C语言实现的函数,如len ...