题目:定义一个shape 抽象类,有一个纯虚函数Area(),派生出Rectangle(正方形)类和Circle(圆形)类,计算各个派生对象的面积Area(),派生类有自己的数据成员和实现计算面积的方法。定义10个元素shape指针数组,随机指向堆中de正方形或圆形对象(需要使用new动态空间)。在程序的最后通过遍历shape指针数组,输出10个图形的名称与面积。
文件夹格式如下:
Circle.h
#pragma once
#include "Shape.h"
class CCircle:public CShape
{
public:
CCircle();
~CCircle();
public:
void setit();
void Area();
private:
double r;
};
#pragma once
#include "Shape.h"
class CRectangle:public CShape
{
public:
CRectangle();
~CRectangle();
public:
void Area();
void setit();
private:
double m_l;
};
Shape.h
#pragma once
class CShape
{
public:
CShape();
~CShape();
public:
virtual void Area() = 0;
virtual void setit()= 0;
};
Circle.cpp
#include "stdafx.h"
#include "Circle.h"
#include <iostream>
using std::cout;
using std::cin;
CCircle::CCircle()
{
}
CCircle::~CCircle()
{
}
void CCircle::setit()
{
std::cout << "请输入圆半径:\n";
cin >> r;
}
void CCircle::Area()
{
cout << "圆的面积为:" << 3.14*r*r << "\n";
}
Rectangle.cpp
#include "stdafx.h"
#include "Rectangle.h"
#include <iostream>
CRectangle::CRectangle()
{
}
CRectangle::~CRectangle()
{
}
void CRectangle::setit()
{
std::cout << "请输入正方形的长:\n";
std::cin >> m_l;
}
void CRectangle::Area()
{
std::cout << "正方形的面积为:"<<m_l*m_l<<"\n";
}
有纯虚函数为抽象类 无实现,所有都自动默认
Shape.cpp
#include "stdafx.h"
#include "Shape.h"
CShape::CShape()
{
}
CShape::~CShape()
{
}
正文如下:
// 上机题-2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Circle.h"
#include "Rectangle.h"
#include <iostream>
#include "Shape.h"
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(NULL)); //随机种子
CShape *p[10]; //指针数组 表示数组中有十个指针 纯虚函数的类为抽象类 无法实现对象 ,但可以定义指针指向任何派生类。
int i = 0;
while (i < 10) //循环输入10次
{
switch (rand() % 2) //取余 有两种情况 要么0 要么1
{
case 0:p[i] = new CCircle; //指向堆内存
p[i]->setit(); //设置圆半径
break;
case 1:
p[i] = new CRectangle; //指向堆内存
p[i]->setit(); //设置正方形长度
break;
default:
break;
}
i++;
}
for (int i = 0; i < 10; i++)
{
p[i]->Area(); //循环打印出什么形状的类型
}
for (int i = 0; i < 10; i++)
{
delete p[i]; //释放内存空间 因为申请十次 循环十次释放
}
return 0;
}