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;
}

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bmNkotc2AECynaY6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值