Jurous 2020-06-09 16:31 采纳率: 0%
浏览 141
已采纳

派生与继承的虚函数问题,有大佬帮忙看看吗

设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数调用,输出点类、圆类和圆柱体类面积。
(点类可以直接return 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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码