设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数调用,输出点类、圆类和圆柱体类面积。
(点类可以直接return 0)

派生与继承的虚函数问题,有大佬帮忙看看吗
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qtchen_1988 2020-06-09 17:31关注
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报