C++学习笔记:利用虚函数面积计算

抽象基类

Shape.h

#pragma once
class Shape
{
public:
	virtual void shapeName()const = 0;			//定义两个纯虚函数
	virtual void printArea()const = 0;			//输出面积
};

圆形

Circle.h

#pragma once
#include "Shape.h"
#include<iostream>
using namespace std;
class Circle :
	public Shape
{
public:
	Circle(float r=0);																			//定义构造函数
	void setRadius(float);																		//设定半径
	float getRadius()const;																		//取半径的值
	virtual void shapeName()const { cout << "Circle:"; }										//对虚函数进行再定义
	virtual void printArea()const{cout<<"面积为:"<<3.14159*radius*radius<<endl;}				//对虚函数进行再定义
	friend ostream &operator<<(ostream &, const Circle &);										//运算符重载
protected:
	float radius;
};

Circle.cpp

#include "Circle.h"

Circle::Circle(float r):radius(r)							//定义构造函数
{
}
void Circle::setRadius(float r)
{
	radius = r;
}
float Circle::getRadius()const
{
	return radius;
}
ostream &operator<<(ostream &output, const Circle &c)
{
	output << "r=" << c.radius;
	return output;
}

矩形

Rectangle.h

#pragma once
#include "Shape.h"
#include<iostream>
using namespace std;
class REctangle :
	public Shape
{
public:
	REctangle(float x=0,float y=0);
	void setXY(float, float);																	//设定x,y的值
	float getX()const;																			//取x的值
	float getY()const;																			//取y的值
	virtual void shapeName()const { cout << "REctangle:"; }										//对虚函数进行再定义
	virtual void printArea()const { cout << "面积为:" << _x*_y << endl; }						//对虚函数进行再定义
	friend ostream &operator<<(ostream &, const REctangle &);									//运算符重载
protected:
	float _x, _y;
};

Rectangle.cpp

#include "Rectangle.h"

REctangle::REctangle(float x,float y):_x(x),_y(y)
{
}
void REctangle::setXY(float x, float y)
{
	_x = x;
	_y = y;
}
float REctangle::getX()const
{
	return _x;
}
float REctangle::getY()const
{
	return _y;
}
ostream &operator<<(ostream &output, const REctangle &r)
{
	output << "x=" << r._x << ",y=" << r._y;
	return output;
}

三角形

Triangle.h

#pragma once
#include "Shape.h"
#include<iostream>
using namespace std;
class Triangle :
	public Shape
{
public:
	Triangle(float x=0,float h=0);
	void setXH(float, float);
	float getX()const;
	float getH()const;
	virtual void shapeName()const { cout << "Triangle:"; }										//对虚函数进行再定义
	virtual void printArea()const { cout << "面积为:" << (_x * height)/2 << endl; }			//对虚函数进行再定义
	friend ostream &operator<<(ostream &, const Triangle &);									//运算符重载
protected:
	float _x, height;
};

Triangle.cpp

#include "Triangle.h"

Triangle::Triangle(float x,float h):_x(x),height(h)
{
}
void Triangle::setXH(float x, float h)
{
	_x = x;
	height = h;
}
float Triangle::getX()const
{
	return _x;
}
float Triangle::getH()const
{
	return height;
}
ostream &operator<<(ostream &output, const Triangle &t)
{
	output << "x=" << t._x << ",h=" << t.height;
	return output;
}

主函数

main.cpp

#include<iostream>
#include<Windows.h>
#include"Circle.h"
#include"Rectangle.h"
#include"Triangle.h"
using namespace std;
int main()
{
	Circle circle(5);						//建立Circle对象
	REctangle rectangle(5, 4);				//建立REctangle对象
	Triangle triangle(5, 4);				//建立Triangle对象

	circle.shapeName();						//用对象名建立静态关联
	cout << circle << endl;					//输出圆的数据
	rectangle.shapeName();					//用对象名建立静态关联
	cout << rectangle << endl;				//输出矩形的数据
	triangle.shapeName();					//用对象名建立静态关联
	cout << triangle << endl;				//输出三角形的数据


	cout << endl;
	Shape *pt;								//定义基类指针

	pt = &circle;							//指针指向Circle类数据
	pt->shapeName();						//用指针建立动态关联
	pt->printArea();						//用指针建立动态关联
	pt = &rectangle;						//指针指向REctangle类数据
	pt->shapeName();						//用指针建立动态关联
	pt->printArea();						//用指针建立动态关联
	pt = &triangle;							//指针指向Triangle类数据
	pt->shapeName();						//用指针建立动态关联
	pt->printArea();						//用指针建立动态关联



	system("pause");
	return 0;
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值