#include <iostream>
using namespace std;
class Shape
{
public:
//普通函數(shù)前加virtual,普通函數(shù)變成了虛函數(shù)
// =0表示抽象虛函數(shù),子類必須實(shí)現(xiàn)該函數(shù)
virtual void printarea()=0;
void hello(){cout<<"Shape hello function"<<endl;};
};
class Circle:public Shape
{
public:
Circle(int a):r(a){}
void hello(){cout<<"Circle hello function"<<endl;};
void printarea(){cout<<"圓形面積為:"<<r*r*3.14<<endl;}
private:
int r;
};
class Rectangle:public Shape
{
public:
Rectangle(int a,int b):x(a),y(b){}
void hello(){cout<<"Rectangle hello function"<<endl;};
void printarea(){cout<<"矩形面積為:"<<x*y<<endl;}
private:
int x;
int y;
};
class Square:public Shape
{
public:
Square(int a):l(a){}
void hello(){cout<<"Square hello function"<<endl;};
void printarea(){cout<<"正方形面積為:"<<l*l<<endl;}
private:
int l;
};
void prints(Shape *s) {
//基類指針s指向子類對(duì)象
//s調(diào)用的函數(shù)printarea是虛函數(shù),所以會(huì)調(diào)用子類實(shí)例的printarea
s->printarea();
//s調(diào)用的函數(shù)hello不是虛函數(shù),所以只會(huì)調(diào)用基類的hello
s->hello();
}
int main()
{
Circle a(1);
prints(&a);
Square b(2);
prints(&b);
Rectangle c(1,2);
prints(&c);
return 0;
}
圓形面積為:3.14
Shape hello function
正方形面積為:4
Shape hello function
矩形面積為:2
Shape hello function