在构造函数中初始化对象属性,在创建对象时更加符合习惯;
#include<iostream>
#include<string>
using namespace std;
//1、抽象出电脑零件的基类;
//
class CPU
{
public:
//纯虚函数提供抽象函数;
virtual void Calculate() = 0;
};
//显卡
class VideoCard
{
public:
virtual void Display() = 0;
};
//内存
class Memory
{
public:
//纯虚函数提供抽象函数;
virtual void Storage() = 0;
};
//2、具体零件生产厂商
//Huawei类
class HuaweiCPU:public CPU
{
public:
//纯虚函数提供抽象函数;
virtual void Calculate()
{
cout << "Huawei CPU calculate..." << endl;
}
};
//显卡
class HuaweiVideoCard:public VideoCard
{
public:
virtual void Display()
{
cout << "Huawei VideoCard display..." << endl;
}
};
//内存
class HuaweiMemory:public Memory
{
public:
//纯虚函数提供抽象函数;
virtual void Storage()
{
cout << "Huawei Memory Storage..." << endl;
}
};
//Apple类
class AppleCPU :public CPU
{
public:
//纯虚函数提供抽象函数;
virtual void Calculate()
{
cout << "Apple CPU calculate..." << endl;
}
};
//显卡
class AppleVideoCard :public VideoCard
{
public:
virtual void Display()
{
cout << "Apple VideoCard display..." << endl;
}
};
//内存
class AppleMemory :public Memory
{
public:
//纯虚函数提供抽象函数;
virtual void Storage()
{
cout << "Apple Memory Storage..." << endl;
}
};
//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
CPU* m_CPU;
VideoCard* m_VideoCard;
Memory* m_Memory;
public:
Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
{
m_CPU = CPU;
m_VideoCard = VideoCard;
m_Memory = Memory;
}
//电脑工作函数;
void Runing()
{
m_CPU->Calculate();
m_VideoCard->Display();
m_Memory->Storage();
}
//释放堆区空间;
~Computer()
{
if (m_CPU)
{
delete m_CPU;
m_CPU = NULL;
}
if (m_VideoCard)
{
delete m_VideoCard;
m_VideoCard = NULL;
}
if (m_Memory)
{
delete m_Memory;
m_Memory = NULL;
}
}
};
int main()
{
//创建第一个电脑;
//调用方式1.在函数中,通过父类指针指向子类:
Computer c1(new HuaweiCPU, new HuaweiVideoCard, new HuaweiMemory);
//电脑运行;
c1.Runing();
cout << "第二台电脑开始工作;" << endl;
//创建零件;应该这里就发生了多态;
CPU* applecpu = new AppleCPU;
VideoCard* applevd = new AppleVideoCard;
Memory* appleme = new AppleMemory;
//创建电脑;
Computer c2(applecpu, applevd, appleme);
c2.Runing();
system("pause");
return 0;
}
在构造电脑时实现多态,这种接口更加方便,合理,符合习惯,
这或许就是构造函数的作用之一
//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
CPU* m_CPU;
VideoCard* m_VideoCard;
Memory* m_Memory;
public:
Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
{
m_CPU = CPU;
m_VideoCard = VideoCard;
m_Memory = Memory;
}
//电脑工作函数;
void Runing()
{
m_CPU->Calculate();
m_VideoCard->Display();
m_Memory->Storage();
}
};
int main()
{
//创建第一个电脑;
//调用方式1.在函数中,通过父类指针指向子类:
Computer c1(new HuaweiCPU, new HuaweiVideoCard, new HuaweiMemory);
//电脑运行;
c1.Runing();
system("pause");
return 0;
}
一开始自己写的在运行时实现多态:
//3、抽象电脑基类,提供工作函数;
class Computer
{
public:
CPU* m_CPU;
VideoCard* m_VideoCard;
Memory* m_Memory;
//电脑工作函数;
void Runing(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
{
//这里为啥需要转换一下?
m_CPU = CPU;
m_VideoCard = VideoCard;
m_Memory = Memory;
m_CPU->Calculate();
m_VideoCard->Display();
m_Memory->Storage();
}
};
int main()
{
//创建第一个电脑;
Computer c1;
//电脑运行;
//调用方式1.在函数中,通过父类指针指向子类:
c1.Runing(new HuaweiCPU,new HuaweiVideoCard,new HuaweiMemory);
system("pause");
return 0;
}