C++实验04(02)Shape类及其子类

题目描述
定义一个基类Shape,有成员函数:calArea(),但什么都不做,返回0。在此基础上公有派生出Rectangle(矩形)类和Circle类,添加相应的数据成员(成员均为double型),重新定义calArea()计算对象的面积。
主函数中,分别定义一个Rectangle和Circle类对象,初始值由键盘输入。(1)通过对象调用相应的calArea(),输出结果;(2)定义Shape类对象指针,分别赋以Rectangle和Circle类的对象地址,通过指针调用calArea(),输出结果;(3)定义Shape类对象引用,以Rectangle和Circle类的对象初始化,通过引用调用calArea(),输出结果。
PI: 3.1415926
输入描述
两行
Rectangle类对象的初值
Circle类对象的初值
输出描述
通过基类对象、基类指针和基类对象引用调用之后的结果
输入样例
3 6
3
输出样例
通过Rectangle类对象调用calArea():18
通过Circle类对象调用calArea():28.2743
通过基类指针调用Rectangle类的calArea():0
通过基类指针调用Circle类的calArea():0
通过基类对象引用调用Rectangle类的calArea():0
通过基类对象引用调用Circle类的calArea():0(中文冒号)

#include <iostream>
#define PI 3.1415926
using namespace std;

class Shape
{
    
    
public:

	int calArea()
	{
    
    
		return 0;
	}

};


class Rectangle :public Shape
{
    
    
public:
	Rectangle(double a, double b)
	{
    
    
		h = a;
		w = b;
	}
	double calArea()
	{
    
    
		return h*w;
	}
	void output()
	{
    
    
		cout << "通过Rectangle类对象调用calArea():" << calArea()<<endl;
	}
protected:
	double h, w;
};

class Circle:public Shape
{
    
    
public:
	Circle(double a)
	{
    
    
		r = a;
	}
	double calArea()
	{
    
    
		return r*r*PI;
	}
	void output()
	{
    
    
		cout << "通过Circle类对象调用calArea():" << calArea() << endl;
	}
protected:
	double r;
};



int main()
{
    
    
	double h, w, r;
	cin >> h >> w >> r;
	Rectangle A(h,w);
	Circle B(r);
	Shape *p1, *p2;
	Shape &q1= A, &q2=B;
	p1 = &A;
	p2 = &B;
	A.output();
	B.output();
	cout << "通过基类指针调用Rectangle类的calArea():" << (*p1).calArea() << endl;
	cout << "通过基类指针调用Circle类的calArea():" << (*p2).calArea() << endl;
	cout << "通过基类对象引用调用Rectangle类的calArea():" << (q1).calArea() << endl;
	cout << "通过基类对象引用调用Circle类的calArea():" << (q2).calArea() << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44179485/article/details/105890582