• c++有关构造函数、析构函数和类的组合的一个简单例子


    来源链接

    实验四(下)

    代码

    #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 << "*************************
    ";
    
        RAM b(DDR3, 1600, 8);
        b.Run();
        b.Stop();
        cout << "*************************
    ";
    
        CD_ROM c(SATA, 2, built_in);
        c.Run();
        c.Stop();
        cout << "*************************
    ";
    
        COMPUTER my_computer(a, b, c, 128, 10);
        cout << "*************************
    ";
    
        my_computer.Run();
        my_computer.Stop();
        cout << "*************************
    ";
    
        return 0;
    }
    

    控制台输出

    说明:macOS+CLion

    屏幕快照 2019-04-27 20.45.59

    注:

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

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

  • 相关阅读:
    第六周 8.23-8.29
    Go-ethereum源码解析-Part I
    Go语言
    UVa Live 4725
    UVa 11134
    UVa 11100
    UVa 11627
    UVa Live 4794
    UVa LA 4254
    UVa 10905
  • 原文地址:https://www.cnblogs.com/hacker-x/p/10780404.html
Copyright © 2020-2023  润新知