声明抽象基类,输出圆、矩形、三角形的面积

1.virtual将函数分为虚函数和非虚函数,其中虚函数又分为纯虚函数和非纯虚函数。

2.一个类函数一个以上的纯虚函数就是抽象类,抽象类不能使用因而不可输出,能输出的必须进行实体化。实体化的方法是在派生类中进行重新定义,将其转化为虚函数(不是纯虚函数)。纯虚函数没有实际意义,只是作为一个接口,或者提醒。

3.我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。

#include<iostream>
#include<cmath>
#define pi 3.1415926
using namespace std;
class Shape
{
	public:
		virtual float printArea()=0;
};
class Circle:public Shape
{
	public:
		Circle();
		Circle(float );
		virtual float printArea();
		friend ostream& operator<<(ostream& ,Circle &);
	protected:
		float radius;
};
float Circle::printArea()
{
	return pi*radius*radius;
}
ostream& operator<<(ostream &out,Circle &c)
{
	out<<"Circle="<<c.printArea();
	return out;
}
Circle::Circle()
{
	radius=0;
}
Circle::Circle(float r)
{
	radius=r;
}
//
class Rectangle:public Shape
{
	public:
		Rectangle();
		Rectangle(float ,float );
		virtual float printArea();
		friend ostream& operator<<(ostream &,Rectangle &);
	protected:
		float x,y;
};
float Rectangle::printArea()
{
	return x*y;
}
ostream& operator<<(ostream& out,Rectangle &r)
{
	out<<"Rectangle="<<r.printArea();
	return out;
}
Rectangle::Rectangle()
{
	x=0,y=0;
}
Rectangle::Rectangle(float a,float b)
{
	x=a;
	y=b;
}
class Triangle:public Shape
{
	public:
		Triangle();
		Triangle(float ,float ,float );
		virtual float printArea();
		friend ostream& operator<<(ostream &,Triangle &t);
	protected:
		float x,y,z;
};
float Triangle::printArea()
{
	return x*y*z;
}
ostream& operator<<(ostream &out,Triangle &t)
{
	out<<"Triangle="<<t.printArea();
	return out;
}
Triangle::Triangle(float a,float b,float c)
{
	x=a,y=b,z=c;
}
Triangle::Triangle()
{
	x=0,y=0,z=0;
}
int main()
{
	Circle circle(12.6);
	cout<<circle<<endl;
	Rectangle rectangle(4.5,8.4);
	cout<<rectangle<<endl;
	Triangle triangle(0.5,4.5,8.4);
	cout<<triangle<<endl;
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是回复: 首先声明一个抽象基类Shape,它包含一个纯虚函数getArea(),用于计算面积。然后派生出三个Circle、Rectangle和Triangle,分别实现getArea()函数,计算圆形矩形三角形面积。最后定义一个函数printArea(),接收一个Shape型的指针,调用它的getArea()函数并输出面积即可。 ### 回答2: 在面向对象编程中,抽象基类是一种特殊的,它不能被实例化,只能被继承。抽象基类的主要作用是将具有相似功能的进行归纳和分,方便代码的维护和重复利用。在本题中,声明一个抽象基类shape可以将三种不同形状的进行统一管理和封装。 具体实现方法如下: 1. 声明抽象基类shape,其中包含一个纯虚函数getArea(),用于计算面积。 class shape { public: virtual double getArea() = 0; }; 2. 派生出三个具体的形状圆形circle、矩形rectangle和三角形triangle。这些派生需要实现抽象基类shape中的纯虚函数getArea()。 class circle : public shape { public: circle(double r) : radius(r) {} double getArea() {return 3.14 * radius * radius;} private: double radius; }; class rectangle : public shape { public: rectangle(double l, double w) : length(l), width(w) {} double getArea() {return length * width;} private: double length; double width; }; class triangle : public shape { public: triangle(double b, double h) : base(b), height(h) {} double getArea() {return 0.5 * base * height;} private: double base; double height; }; 3. 编写一个输出三个形状面积的函数,使用抽象基类指针实现多态调用。 void printArea(shape* sh) { cout << "The area is " << sh->getArea() << endl; } 4. 在主函数中创建三个对象,并分别调用输出函数。 int main() { circle c(5); rectangle r(3, 4); triangle t(2, 5); printArea(&c); printArea(&r); printArea(&t); return 0; } 运行结果: The area is 78.5 The area is 12 The area is 5 通过使用抽象基类,我们可以将具有相似功能的进行分和管理,避免代码冗余和重复编写。同时,使用虚函数实现多态性,可以让同一个函数实现不同的功能,提高代码的灵活性和可维护性。 ### 回答3: 要实现声明抽象基类shape,可以定义一个Shape,其中定义了一个纯虚函数getArea(),用于返回该形状的面积。然后派生出三个Circle,Rectangle和Triangle,分别实现getArea()函数,获取各自形状的面积。 具体实现可以如下: ```c++ #include <iostream> using namespace std; class Shape{ public: virtual double getArea()=0; }; class Circle : public Shape{ public: Circle(double r){ radius=r; } double getArea(){ return 3.14*radius*radius; } private: double radius; }; class Rectangle : public Shape{ public: Rectangle(double l, double w){ length=l; width=w; } double getArea(){ return length*width; } private: double length; double width; }; class Triangle : public Shape{ public: Triangle(double b, double h){ base=b; height=h; } double getArea(){ return 0.5*base*height; } private: double base; double height; }; void printArea(Shape *shape){ cout<<"面积为:"<<shape->getArea()<<endl; } int main(){ Circle c(3); Rectangle r(4,5); Triangle t(6,8); printArea(&c); printArea(&r); printArea(&t); return 0; } ``` 然后我们可以定义一个函数printArea,用于输出各个形状的面积。该函数接收一个Shape型的指针作为参数,根据指针所指向的对象调用getArea()函数获取面积,并输出。 以上就是实现声明抽象基类shape,从中派生出三个圆形circle,矩形rectangle,三角形triangle,用一个函数输出三个面积的具体方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值