1.多态案例-计算机实现
class AbstractCalculate
{
public:
virtual int getResult()
{
return 0;
}
int num1;
int num2;
};
//加法
class AddCalculate : public AbstractCalculate
{
int getResult()
{
return num1 + num2;
}
};
//减法
class SubCalculate : public AbstractCalculate
{
int getResult()
{
return num1 - num2;
}
};
//乘法
class MulCalculate : public AbstractCalculate
{
int getResult()
{
return num1 * num2;
}
};
void test01()
{
//加法运算
AbstractCalculate* add = new AddCalculate;
add->num1 = 10;
add->num2 = 20;
cout << add->num1 << "+" << add->num2 << "=" << add->getResult() << endl;
//用完后需要销毁
delete add;
//减法运算
AbstractCalculate* sub = new SubCalculate;
sub->num1 = 20;
sub->num2 = 10;
cout << sub->num1 << "-" << sub->num2 << "=" << sub->getResult() << endl;
delete sub;
//乘法运算
AbstractCalculate* mul = new MulCalculate;
mul->num1 = 10;
mul->num2 = 20;
cout << mul->num1 << "*" << mul->num2 << "=" << mul->getResult() << endl;
delete mul;
}
2.纯虚函数和抽象类
纯虚函数
(使用virtual为虚函数,没有实现的虚函数是纯虚函数 virtual void func() = 0;)
只要有一个纯虚函数,这个类称为抽象类
抽象类特点:
1.无法实例化对象
2.抽象类的子类 必须要重写父类中的纯虚函数,否则也属于抽象类
class Base
{
public:
virtual void func() = 0;
};
class Son : public Base
{
public:
virtual void func()
{
cout << "func函数调用" << endl;
}
};
void test01()
{
//Base b; //抽象类无法实例化对象
//Son s = new Son; //子类必须重写父类中的纯虚函数,否则无法实例化对象
Base* base = new Son;
base->func();
}
多态案例-制作饮品
class AbstractDrinking
{
public:
//煮水
virtual void Boil() = 0;
//冲水
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加入辅料
virtual void PutSomething() = 0;
//制作饮品
void makeDrink()
{
Boil();
Brew();
PourInCup();
PutSomething();
}
};
//制作咖啡
class Coffee : public AbstractDrinking
{
public:
virtual void Boil()
{
cout << "煮水" << endl;
}
virtual void Brew()
{
cout << "冲泡咖啡" << endl;
}
virtual void PourInCup()
{
cout << "倒入咖啡杯中" << endl;
}
virtual void PutSomething()
{
cout << "加入牛奶和糖" << endl;
}
};
//制作茶叶
class Tea : public AbstractDrinking
{
public:
virtual void Boil()
{
cout << "煮纯净水" << endl;
}
virtual void Brew()
{
cout << "泡茶叶" << endl;
}
virtual void PourInCup()
{
cout << "倒入茶杯中" << endl;
}
virtual void PutSomething()
{
cout << "加入柠檬" << endl;
}
};
//制作函数
void doWork(AbstractDrinking* abs)
{
abs->makeDrink();
delete abs;
}
3.多态案例-组装电脑
class CPU
{
public:
virtual void calculate() = 0;
};
class VideoCard
{
public:
virtual void display() = 0;
};
class Memory
{
public:
virtual void storage() = 0;
};
class Computer
{
public:
Computer(CPU *cpu,VideoCard *vc, Memory *mem)
{
m_cpu = cpu;
m_vc = vc;
m_mem = mem;
}
~Computer()
{
if (m_cpu != NULL)
{
delete m_cpu;
m_cpu = NULL;
}
if (m_vc != NULL)
{
delete m_vc;
m_vc = NULL;
}
if (m_mem != NULL)
{
delete m_mem;
m_mem = NULL;
}
}
void doWork()
{
m_cpu->calculate();
m_vc->display();
m_mem->storage();
}
private:
CPU* m_cpu;
VideoCard* m_vc;
Memory* m_mem;
};
//具体厂商
//Intel厂商
class IntelCPU :public CPU
{
public:
virtual void calculate()
{
cout << "Intel的CPU开始计算了!" << endl;
}
};
class IntelVideoCard :public VideoCard
{
public:
virtual void display()
{
cout << "Intel的显卡开始显示了!" << endl;
}
};
class IntelMemory :public Memory
{
public:
virtual void storage()
{
cout << "Intel的内存开始存储了!" << endl;
}
};
void test01()
{
//第一台电脑零件
CPU* intelCpu = new IntelCPU;
VideoCard* intelVideoCard = new IntelVideoCard;
Memory* intelMemory = new IntelMemory;
Computer *computer = new Computer(intelCpu, intelVideoCard, intelMemory);
computer->doWork();
delete computer;
}