0
点赞
收藏
分享

微信扫一扫

C++ 40.类与对象—纯虚函数与抽象类、多态案例2(制作饮品)

新鲜小饼干 2022-03-18 阅读 71

在多态中,通常父类中虚函数的实现是毫无意义,主要是调用子类重写的内容
因此可以将虚函数改为纯虚函数
纯虚函数语法:virtual 返回值类型 函数名 (参数列表)=0;
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点:1.无法实例化对象   2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类

#include<iostream>
using namespace std;
#include<string>

class Base	
{
public:
	//纯虚函数
	//只要有一个纯虚函数,这个类称为抽象类
	//抽象类特点:1.无法实例化对象   2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类
	virtual void func() = 0;
};

class Son :public Base
{
public:
	virtual void func() 
	{
		cout << "func()函数调用" << endl;
	};
};
void test01()
{
	/*Base b;
	new Base;*/
	//Son s;//子类必须重写父类中纯虚函数,否则无法实例化对象	
	Base * base = new Son;//new什么,调用什么
	base->func();
}

int main()
{
	test01();
	
	system("pause");
	return 0;
}

多态案例2(制作饮品)

案例描述:制作饮品的大致流程为:煮水—冲泡—倒入杯中—加入辅料
利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶

#include<iostream>
using namespace std;
#include<string>

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)// AbstractDrinking * abs= new Coffee
{
	abs->makeDrink();
	delete abs;//释放
}

void test01()
{
	//制作咖啡
	doWork(new Coffee);
	cout << "-----------------------" << endl;
	//制作茶叶
	doWork(new Tea);
}

int main()
{
	test01();

	system("pause");
	return 0;
}

 

举报

相关推荐

纯虚类与抽象类

0 条评论