设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数调用,输出点类、圆类和圆柱体类面积。
(点类可以直接return 0)
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
class Point{
public:
Point(){mArea = 0.0;}
virtual double area(){return mArea;}
protected:
double mArea;
};
class Circle:public Point{
public:
Circle(double r){
mArea = M_PI*r*r;
}
};
class Cylinder:public Circle{
public:
Cylinder(double r,double h):Circle(r){
mArea = (M_PI*r*r + M_PI*r*h)*2.0;
}
};
int main()
{
Point *point = new Point;
std::cout << point->area() << std::endl;
Point *circle = new Circle(3.5);
std::cout << circle->area() << std::endl;
Point *cylinder = new Cylinder(3.5,10);
std::cout << cylinder->area() << std::endl;
return 0;
}
///////////////////////////////////////////
//////////////////////////////////////////
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
class Point{
public:
Point():mR(0.0){}
virtual double area(){return 0.0;}
protected:
double mR;
};
class Circle:public Point{
public:
Circle(double r){ mR = r;}
virtual double area(){return M_PI*mR*mR;}
};
class Cylinder:public Circle{
public:
Cylinder(double r,double h):Circle(r),mH(h){
}
virtual double area(){return (M_PI*mR*mR + M_PI*mR*mH)*2.0;}
protected:
int mH;
};
int main()
{
Point *point = new Point;
std::cout << point->area() << std::endl;
Point *circle = new Circle(3.5);
std::cout << circle->area() << std::endl;
Point *cylinder = new Cylinder(3.5,10);
std::cout << cylinder->area() << std::endl;
return 0;
}