#include <iostream> const double PI=3.14; using namespace std; class Figure //定义基类 { public: Figure(){}; virtual double area() const =0; //定义为纯虚函数 }; class Circle : public Figure //定义派生类,公有继承方式 { public: Circle(double myr){R=myr;} virtual double area() const {return PI*R*R;}//定义为虚函数 protected: double R; }; class Rectangle : public Figure //定义派生类,公有继承方式 { public: Rectangle (double myl,double myw){L=myl;W=myw;} virtual double area() const {return L*W;} //定义为虚函数 private: double L,W; }; void func(Figure &p) //形参为基类的引用 { cout<<p.area()<<endl; } double main() { Circle c(3.0); // Circle派生类对象 cout<<"Area of circle is "; func(c); Rectangle rec(4.0,5.0); // Rectangle派生类对象 cout<<"Area of rectangle is "; func(rec); return 0; }
时间: 2024-02-15 14:28:08 浏览: 76
这段代码是一个简单的面向对象的程序,实现了多态的概念。其中定义了一个基类Figure,它是一个抽象类,其中有一个纯虚函数area()。同时还定义了两个派生类,一个是Circle,一个是Rectangle,它们都继承了Figure类,并且都实现了area()函数。在main函数中,分别创建了Circle和Rectangle对象,并通过func函数调用了它们的area()函数,实现了多态的效果。在这个过程中,我们不需要知道对象的具体类型,只需要知道它们都是Figure类的派生类即可。
相关问题
#include<iostream> using namespace std; class Point{ int x,y; public: Point(int x=0,int y=0) { this->x=x,this->y=y; } void move(int offx,int offy) { x+=offx,y+=offy; } void showxy() { cout<<"("<<x<<","<<y<<")"<<endl; } }; const double pi=3这段代码有错误吗
这段代码没有语法错误。但是,常量 pi 的定义可能是不正确的。在代码中,它被定义为 3,而不是 3.14 或其他浮点数。通常情况下,我们将 pi 定义为一个具有足够精度的浮点数,如下所示:
```c++
const double pi = 3.14159265358979323846;
```
这将 pi 定义为具有 20 个有效数字的双精度浮点数,以便在数学计算中使用。
已知抽象类类Shape定义如下,其中两个纯虚函数分别为计算面积getArea()和计算周长getPerim()。请通过Shape类派生出矩形类Rectangle和圆类Circle,计算各自的面积和周长,并能够按照main函数给出的测试代码完成给定的输入。 ####Shape类定义及测试程序如下: #include <iostream> using namespace std; const double PI=3.14; class Shape { public: virtual double getArea()=0; virtual double getPerim()=0; }; /*请在这里输入你的代码*/ int main(){ double r,l,w; cin>>r; cin>>l>>w; Shape *p=NULL; p=new Circle(r); print(p);//输出圆面积与周长 p=new Rectangle(l,w); print(p);//输出矩形面积与周长 return 0; } 输入样例: 1 2 3 输出样例: Area:3.14 Perimeter:6.28 Area:6 Perimeter:10
请参考以下代码:
```c++
#include <iostream>
using namespace std;
const double PI=3.14;
class Shape {
public:
virtual double getArea()=0;
virtual double getPerim()=0;
};
class Circle : public Shape {
private:
double r;
public:
Circle(double r) : r(r) {}
double getArea() { return PI * r * r; }
double getPerim() { return 2 * PI * r; }
};
class Rectangle : public Shape {
private:
double l, w;
public:
Rectangle(double l, double w) : l(l), w(w) {}
double getArea() { return l * w; }
double getPerim() { return 2 * (l + w); }
};
void print(Shape *p) {
cout << "Area:" << p->getArea() << " ";
cout << "Perimeter:" << p->getPerim() << endl;
}
int main() {
double r, l, w;
cin >> r;
cin >> l >> w;
Shape *p = NULL;
p = new Circle(r);
print(p);
p = new Rectangle(l, w);
print(p);
return 0;
}
```
运行结果:
输入:
1 2 3
输出:
Area:3.14 Perimeter:6.28
Area:6 Perimeter:10
阅读全文