学了多态,自己对多态的理解,多态的四个条件虚函数,继承,重写,父类指针指向子类对象
Shape 是基类,Rectangle是子类,Circle也是子类,子类都有面积,Podetium是柱体类,
它有长度,与图形类组合可得到柱体的体积,运用多态实现
#include<iostream>
#include<string>
using namespace std;
/*Shape 是基类,Rectangle是子类,Circle也是子类,子类都有面积,Podetium是柱体类,
*它有长度,与图形类组合可得到柱体的体积,运用多态实现
*/
class Shape{//图形类
protected:
string colour;
static int num;//计数
public:
//构造函数
Shape(string colour=" ")
{
this->colour=colour;
num++;
}
//析构函数
~Shape(){
num--;
}
//修改颜色
void setColour(string colour)
{
this->colour=colour;
}
int getNum(){
return num;
}
//纯虚函数
virtual double getArea()=0;
//虚函数,多态条件之一
virtual void print(){
cout<<"颜色是:"<<colour<<endl;
}
};
int Shape::num=0;//类外赋值
class Rectangle:public Shape{//矩形类,继承多态条件之二
double longth;
double wideth;
public:
Rectangle(double longth=0.0,double wideth=0.0,string colour=" "):Shape(colour){
this->longth=longth;
this->wideth=wideth;
}
double getArea(){ //多态条件之四,重写
return longth*wideth;
}
void print(){//
cout<<"长为:"<<longth<<" "<<"宽为:"<<wideth<<" "<<"颜色为:"<<colour<<endl;
}
};
class Circle:public Shape{//圆类
double radius;//半径
public:
Circle(double radius=0.0,string colour=" "):Shape(colour){
this->radius=radius;
}
double getArea(){
return 2*3.14*radius;
}
void print(){
cout<<"半径为:"<<radius<<" "<<"颜色为:"<<colour<<endl;
}
};
class Podetium{//柱体类,
double highth;
public:
Shape* s; //多态条件之三,父类指针指向子类对象
Podetium(double highth){
this->highth=highth;
}
void setPodetium(Shape* s){
this->s=s;
}
double getVolume(){
return highth*s->getArea();
}
};
void main(){
Rectangle r1(3,4,"red");
r1.print();
cout<<"图形的个数:"<<r1.getNum()<<endl;
cout<<endl;
Circle c1(3.3,"rd");
c1.print();
cout<<"图形的个数:"<<c1.getNum()<<endl;
cout<<endl;
Podetium p(5.6);
p.setPodetium(&r1); //多态条件之三,父类指针指向子类对象
cout<<"图形的体积:"<<p.getVolume()<<endl;
cout<<endl;
p.setPodetium(&c1);
p.s->setColour("yellow");
c1.print();
cout<<"图形的体积:"<<p.getVolume()<<endl;
cout<<endl;
}