C++中的构造函数与析构函数及组合类的调用
// 构造函数与析构函数及类的组合
#include "stdafx.h"
#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(const CPU &c){
rank = c.rank;
frequency = c.frequency;
voltage = c.voltage;
cout << "拷贝构造了一个CPU!" << endl;
}
//CPU析构函数
~CPU(){
cout << "析构了一个CPU!" << endl;
}
//函数API接口
CPU_Rank GetRank() const {return rank;}
int GetFrequency() const {return frequency;}
float GetVoltage() const {return voltage;}
void SetRank(CPU_Rank r) {rank = r;}
void SetFrequnecy(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(const RAM &c){
type = c.type;
frequency = c.frequency;
size = c.size;
cout << "拷贝构造了一个RAM!" << endl;
}
//RAM析构函数
~RAM(){cout << "析构一个RAM!" << endl;}
//函数API接口
RAM_Type GetType() const {return type;}
unsigned int GetFrequency() const {return frequency;}
unsigned int GetSize() const {return size;}
void SetRank(RAM_Type t) {type = t;}
void SetFrequnecy(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{exteral, 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(const CD_ROM &c){
interface_type = c.interface_type;
cache_size = c.cache_size;
install_type = c.install_type;
cout << "拷贝构造了一个CD_ROM!" << endl;
}
//CD_ROM析构函数
~CD_ROM(){
cout << "析构了一个CD_ROM!" << endl;
}
//函数API接口
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;
unsigned int bandwidth;
public:
COMPUTER(CPU c, RAM r, CD_ROM cd, unsigned int s, unsigned int b);
//COMPUTER析构函数
~COMPUTER(){cout << "析构一个COMPUTER!" << 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构造函数的函数体 {类名::函数名:初始化列表} 此处需要调用两次拷贝构造函数分别是:CPU c, RAM r, CD_ROM cd
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){
//storage_size = s;
//bandwidth = b;
cout << "构造了一个COMPUTER!" <<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
CPU a(P6,300,2.8);
a.Run();
a.Stop();
cout << "*********************************************" << endl;
RAM b(DDR3, 1600, 8);
b.Run();
b.Stop();
cout << "*********************************************" << endl;
CD_ROM c(SATA, 2, built_in);
c.Run();
c.Stop();
cout << "*********************************************" << endl;
COMPUTER my_computer(a, b, c, 128, 10);
cout << "*********************************************" << endl;
my_computer.Run();
my_computer.Stop();
cout << "*********************************************" << endl;
//system("pause"); //此语句会提前中止程序,会导致程序不能顺利的调用析构函数
return 0;
//在执行完return 0; 语句后调用析构函数
}
C++中的构造函数与析构函数及组合类的调用的更多相关文章
- python中的构造函数和析构函数
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
- (转载)C++中, 构造函数和析构函数能不能被显示调用?
(转载)http://blog.csdn.net/zhangxinrun/article/details/6056321 代码: view plaincopy to clipboardprint?#i ...
- C++中的构造函数和析构函数
构造函数: 在类实例化对象时自动执行,对类中的数据进行初始化.构造函数可以从载,可以有多个,但是只能有一个缺省构造函数. 析构函数: 在撤销对象占用的内存之前,进行一些操作的函数.析构函数不能被重载, ...
- 菜鸟谈谈C#中的构造函数和析构函数
本节说明对象的创建.初始化和销毁过程.本节介绍下列主题: l 类构造函数 l 结构构造函数 l 析构函数 类构造函数 本节将讨论三种类构造函数: 类构造 ...
- 005_python中的构造函数和析构函数
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
- C# 中的构造函数与析构函数
C# 中的构造函数 类的 构造函数 是类的一个特殊的成员函数,当创建类的新对象时执行. 构造函数的名称与类的名称完全相同,它没有任何返回类型. 下面的实例说明了构造函数的概念: using Syste ...
- php中的构造函数与析构函数
PHP面向对象——构造函数.析构函数 __construct.__destruct__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称, ...
- C++类继承中的构造函数和析构函数 调用顺序
思想: 在C++的类继承中,构造函数不能被继承(C11中可以被继承,但仅仅是写起来方便,不是真正的继承) 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时, ...
- (C++)C++类继承中的构造函数和析构函数
思想: 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时,其顺序正好与构造相反: 例子: #include <iostream& ...
随机推荐
- JavaWeb之基础(1) —— 文件、目录结构和创建项目
1. JavaWeb应用 JavaWeb应用从大类上分为静态和动态两种. 静态应用就是传统的HTML文件+素材资源构造的静态网页,不需要特殊的配置.JavaWeb也不是专门用来做静态网站的. 动态应用 ...
- Java设计模式之三建造者模式和原型模式
建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.简单的来说就是将一个复杂的东西 ...
- web前端兼容性问题
传送门:https://www.cnblogs.com/zhoudawei/p/7497544.html
- Oracle语法 及 SQL题目(三)
目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...
- Oracle序列 与 基本函数介绍
目录 Oracle序列 与 基本函数介绍 常用词汇 数据字典(data dictionary:dd) oracle序列技术理解 账号管理 基本函数介绍及应用 海韵听心 PL/SQL Developer ...
- 文献阅读 | The single-cell transcriptional landscape of mammalian organogenesis | 器官形成 | 单细胞转录组
The single-cell transcriptional landscape of mammalian organogenesis 老板已经提了无数遍的文章,确实很nb,这个工作是之前我们无法想 ...
- leetcode 380. Insert Delete GetRandom O(1) 、381. Insert Delete GetRandom O(1) - Duplicates allowed
380. Insert Delete GetRandom O(1) 实现插入.删除.获得随机数功能,且时间复杂度都在O(1).实际上在插入.删除两个功能中都包含了查找功能,当然查找也必须是O(1). ...
- Postgresql常用函数整理
一.字符串函数 1.函数:string || string(string || non-string) 说明:字符串(或与非字符串)连接 示例: 2.函数:char_length(string) 说明 ...
- AS的常见问题
版本问题 a.Gradle的版本 用于将代码和资源打包生成apk的编译脚本.此版本号究竟是啥得去studio的安装目录下查看b.Gradle插件的版本 com.android.tools.build: ...
- DEX-6-caffe模型转成pytorch模型办法
在python2.7环境下 文件下载位置:https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/ 1.可视化模型文件prototxt 1)在线可视化 ...