黑马二十四 day07

1.静态联编和动态联编

#include<iostream>
using namespace std;
class animal{
public:
	virtual void speak(){//要使speak成为虚函数
	cout<<"动物在说话"<<endl;
	}
};
class cat:public animal{
public:
	void speak(){//对父类speak进行重写
	cout<<"喵喵喵"<<endl;
	}
};
void dospeak(animal &a1){//这里是对父类的对象引用,但下面的cat是animal的子类,所以是父类的引用指向了子类对象,这就是多态性
	a1.speak();
}
int main(){
	cat c1;
	dospeak(c1);//发生继承关系时,是可以运行子类型可以转换成父类型使用
	animal *a1=new cat;//a1会被转换成cat类
	a1->speak();//这样也可以调用cat的speak
}

2.多态性案例 计算器

#include<iostream>
using namespace std;
class Abstractcalculator{
public:
	virtual double result(){//抽象类计算器
		return 0;
	}
	double val1;
	double val2;
	getval(double a,double b){
		val1=a;
		val2=b;
	}
};
class Pluscalculator:public Abstractcalculator{
public:
	virtual double result(){//抽象类计算器加法功能
		return val1+val2;
	}
};//如果要加入新的功能只需要扩展即可不需要修改任何代码
class Divisioncalculator:public Abstractcalculator{
public:
	virtual double result(){//抽象类计算器除法功能
		return val1/val2;
	}
};
int main(){
	Abstractcalculator *a1;
	a1=new Pluscalculator;
	a1->getval(10,20);
	cout<<a1->result()<<endl;//加法
	delete a1;
	a1=new Divisioncalculator;
	cout<<a1->result()<<endl;//除法
}

3.通过纯虚函数和抽象类完成饮料制作流程的抽象过程

#include<iostream>
using namespace std;
class makedrink{//做饮料的抽象类,因为含有纯虚函数
public:
	virtual void no1()=0;//第一步
	virtual void no2()=0;//第二步
	virtual void no3()=0;//第三步
	virtual void no4()=0;//第四步
	virtual void dowork(){
	no1();
	no2();
	no3();
	no4();
	cout<<"完成制作"<<endl;
	}//完成制作的流程
};
class makecoffe:public makedrink{//做咖啡
public:
	virtual void no1(){//只需要对步骤虚函数重写就行
	cout<<"煮水"<<endl;
	}//第一步
	virtual void no2(){
	cout<<"冲泡咖啡"<<endl;
	}//第二步
	virtual void no3(){
	cout<<"倒入杯中"<<endl;
	}//第三步
	virtual void no4(){
	cout<<"加糖和牛奶"<<endl;
	}//第四步
};

class makeicewater:public makedrink{//做一杯冰水
public:
	virtual void no1(){//只需要对步骤虚函数重写就行
	cout<<"水倒入杯中"<<endl;
	}//第一步
	virtual void no2(){
	cout<<"加入冰块"<<endl;
	}//第二步,在这里冰水已经完成,但是纯虚函数也必须要实现
	virtual void no3(){
	}//第三步
	virtual void no4(){
	}//第四步
};

//业务函数
void dowork(makedrink *m1){
	m1->dowork();
	delete m1;
}
int main(){
	dowork(new makecoffe);
	cout<<"----------------------------------------";
	dowork(new makeicewater);
}
发布了71 篇原创文章 · 获赞 39 · 访问量 2900

猜你喜欢

转载自blog.csdn.net/weixin_45221477/article/details/105325966