C++学习笔记之:纯虚函数使用方法

题目:定义一个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;
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值