C++的类定义中构造函数和析构函数、成员函数等调用调试
CPU类的定义
#include<iostream>
using namespace std;
enum CPU_RANK
{
P1 = 1,
P2,
P3,
P4,
P5,
P6,
P7
};
class CPU
{
public:
CPU(CPU_RANK rank=P3, unsigned int frequency=1600,float voltage=1.5,unsigned id=0);
~CPU();
void show_info();
private:
CPU_RANK cpu_rank;
unsigned int cpu_frequency;
float cpu_voltage;
unsigned int cpu_id;
};
CPU::CPU(CPU_RANK rank,unsigned int frequency,float voltage,unsigned id):
cpu_rank(rank),cpu_frequency(frequency),cpu_voltage(voltage),cpu_id(id)
{
cout << cpu_id << "号cpu被构造。" << endl;
}
CPU::~CPU()
{
cout << cpu_id << "号cpu被析构。" << endl;
}
void CPU::show_info()
{
cout << "\t等级:" << cpu_rank << endl;
cout << "\t频率:" << cpu_frequency << "MHz" << endl;
cout <<"\t 电压:" << cpu_voltage << "V" << endl << endl;
}
RAM类的定义
#include<string>
#include<iostream>
using namespace std;
class RAM
{
public:
RAM(string brand="金士顿",unsigned int capacity = 4096,unsigned int id =0);
~RAM();
void show_info();
private:
string ram_brand;
unsigned int ram_capacity;
unsigned int ram_id;
};
RAM::RAM(string brand,unsigned int capacity,unsigned int id):
ram_brand(std::move(brand)),ram_capacity(capacity),ram_id(id)
{
cout << ram_id << "号内存被构造。" << endl;
}
RAM::~RAM()
{
cout << ram_id << "号内存被析构。" << endl;
}
void RAM:: show_info()
{
cout << "\t品牌:" << ram_brand << endl;
cout << "\t容量:" << ram_capacity << endl << endl;
}
CDROM类的调用
#include<iostream>
#include<string>
using namespace std;
class CDROM
{
public:
CDROM(string brand="华硕",unsigned int id =0);
~CDROM();
void show_info();
private:
string cdrom_brand;
unsigned int cdrom_id;
};
CDROM::CDROM(string brand,unsigned int id):cdrom_brand(brand),cdrom_id(id)
{
cout << cdrom_id << "号光驱被构造。" << endl;
}
CDROM::~CDROM()
{
cout << cdrom_id << "号光驱被析构。" << endl;
}
void CDROM::show_info()
{
cout << "\t品牌:" << cdrom_brand << endl << endl;
}
Computer的类的调用以及main函数
#include<iostream>
#include<string>
#include"CPU.h"
#include"RAM.h"
#include"CDROM.h"
using namespace std;
class Computer
{
public:
Computer(CPU_RANK cpu_rank,unsigned int cpu_frequency,float cpu_voltage,unsigned int cpu_id,
string ram_brand,unsigned int ram_capacity,unsigned ram_id,
string cdrom_brand,unsigned int cdrom_id,
unsigned int id);
~Computer();
void show_info();
private:
CPU cpu;
RAM ram;
CDROM cdrom;
unsigned int computer_id;
};
Computer::Computer(CPU_RANK cpu_rank,unsigned int cpu_frequency,float cpu_voltage,unsigned int cpu_id,
string ram_brand,unsigned int ram_capacity,unsigned ram_id,
string cdrom_brand,unsigned int cdrom_id,
unsigned int id) :
cpu(cpu_rank,cpu_frequency,cpu_voltage,cpu_id),
ram(ram_brand,ram_capacity,ram_id),
cdrom(cdrom_brand,cdrom_id),
computer_id(id)
{
cout << computer_id <<"号计算机被构造。" << endl;
}
Computer::~Computer()
{
cout << computer_id <<"号计算机被析构。" << endl;
}
void Computer::show_info()
{
cout <<"CPU信息:"<< endl;
cpu.show_info();
cout<<"内存信息:"<< endl;
ram.show_info();
cout<<"光驱信息:"<< endl;
cdrom.show_info();
}
int main()
{
Computer c1(P5,2200,1.5,1,"金士顿",8192,1,"索尼",1,1);
c1.show_info();
Computer c2(P7,3600,2.2,2,"三星",4096,2,"先锋",2,2);
c2.show_info();
system("pause");
return 0;
}
对代码的理解以及解释
在之间遇见的问题是string的内容需要调用#include的string而不是#include的cstring,这两者还是有区别的,之后是明白了私有成员的调用还是需要进行构造函数对其赋值才行,保护级别较高。之后,可以将类的声明放在头文件里面,这样可以使得最后呈现源文件也就是main函数存在的文件更加的简洁明了。如果需要在这之上将调用过前三个头文件的定义类写在头文件里,则需要添加判断ifndef的操作,详情见c++程序设计语言书本177页。