zoukankan      html  css  js  c++  java
  • 12月测试题:6.计算面积和(虚函数的使用)

    **
    圆类Circle有如下数据成员和成员函数:圆心坐标、半径、面积函数、输出函数(即输出圆心坐标和半径信息)、相应构造函数
    矩形类Rect有如下数据成员和成员函数:左上角顶点、宽、高、面积函数、输出函数(即输出顶点坐标、宽和高信息)、相应构造函数
    基于继承性思想,设计上述两个类的共同父类Shape,并基于父类实现上述两个类。
    基于上述两个类,实现1个圆对象和1个矩形对象的面积总和计算并输出,输出这2个对象的信息。
    圆周率用3.1415926参与计算。**
    前置代码:

    #include <iostream>
    using namespace std;
    class Shape
    {
    protected:
    	double x,y;
    public:
    	Shape(double a=0.0,double b=0.0)
    	{x=a;y=b;}
    

    后置代码:

    int main()
    {	
        double m,e,f;
        cin>>m>>e>>f;
    	Circle c1(100,100,m);
    	Rect r1(50,50,e,f);	
    	Shape *s1=&c1,*s2=&r1;
    	s1->Show();	
    	s2->Show();
    	cout<<"面积和="<<s1->area()+s2->area()<<endl;	
    	return 0;
    }
    

    分析:由于前后置代码已经给定
    看main函数可以得知 他希望基类指针能调用在子类中重写后的函数
    那就需要使基类中被重写的函数为虚函数,这样就可以实现调用了

    题解为

    #include <iostream>
    using namespace std;
    class Shape
    {
    protected:
    	double x,y;
    public:
    	Shape(double a=0.0,double b=0.0)
    	{x=a;y=b;}
    	virtual void Show()//重点就在这,由于main中的s1s2都是基类Shape类的, 
    	{//因此如果不添加virtual使这里的函数为虚的话就无法调用子类中重写后的show 
    		cout<<x<<","<<y;
    	}
    	virtual double area()=0;//这里同理,基类中没有的就以纯虚函数的形式写出来 
    };
    double pi=3.1415926;
    class Circle :public Shape
    {//在两个子类中没什么特别的,照常写  难点在于虚函数 
    	public:
    		double r;
    		Circle(double a,double b,double c):Shape(a,b)
    		{
    			r=c;
    		}
    		void Show()
    		{
    			cout<<"圆心=";
    			Shape::Show();
    			cout<<",半径="<<r<<endl;
    		}
    		double area()
    		{
    			return pi*r*r;
    		}
    		
    };
    class Rect :public Shape
    {
    	public:
    		double a1,b1;
    		Rect(double a,double b,double c,double d):Shape(a,b)
    		{
    			a1=c;b1=d;
    		}
    		void Show()
    		{
    			cout<<"左上角顶点=";
    			Shape::Show();
    			cout<<",宽="<<a1<<",高="<<b1<<endl;
    		}
    		double area()
    		{
    			return a1*b1;
    		}
    };
    int main()
    {	
        double m,e,f;
        cin>>m>>e>>f;
    	Circle c1(100,100,m);
    	Rect r1(50,50,e,f);	
    	Shape *s1=&c1,*s2=&r1;
    	s1->Show();	
    	s2->Show();
    	cout<<"面积和="<<s1->area()+s2->area()<<endl;	
    	return 0;
    }
    
    
  • 相关阅读:
    终端解析 规格严格
    用HQ时,出现了一个Bug 规格严格
    GC这篇文章介绍得很基本 规格严格
    DB2协议研究 规格严格
    JVM monitoring 规格严格
    很有趣的GC内容 规格严格
    在linux内核中修改TCP MSS值 规格严格
    最近为项目写了一个调试模块,由此想到的一些内容 规格严格
    Java中国象棋博弈程序探秘[3]——着法合法性判断
    NetBeans 时事通讯(刊号 # 10 Jun 03, 2008)
  • 原文地址:https://www.cnblogs.com/hzshisan/p/12571095.html
Copyright © 2011-2022 走看看