#include <iostream> using namespace std; class Shape { public: Shape(){ } ~Shape(){ } (1) ; }; class Rectangle : public Shape{ public: (2) L(i),W(j) { } ~Rectangle(){ } double GetPerim() { return 2 * (L + W); } private: double L,W; }; class Circle :public Shape{ public: (3) R(r) { } double GetPerim() { return 3.14 * 2 * R; } private: double R; }; int main(){ (4) ; sp = new Circle(10); cout<<sp->GetPerim()<<endl (5) ; sp = new Rectangle(6, 4); (6) ; delete sp; return 0; }//输出62.8 20
时间: 2024-01-24 15:04:56 浏览: 85
题目中给出的代码不完整,无法进行编译和执行。在缺失的部分填写代码后,可以得到输出为62.8和20。
完整的代码如下所示:
```
#include <iostream>
using namespace std;
class Shape {
public:
Shape(){ }
virtual ~Shape(){} // 1. 在基类中添加虚析构函数
virtual double GetPerim() = 0; // 2. 在基类中添加纯虚函数
};
class Rectangle : public Shape{
public:
Rectangle(double i, double j) : L(i), W(j){ }
~Rectangle(){ }
double GetPerim() { return 2 * (L + W); }
private:
double L, W;
};
class Circle :public Shape{
public:
Circle(double r) : R(r){ }
double GetPerim() { return 3.14 * 2 * R; }
private:
double R;
};
int main(){
Shape *sp = nullptr; // 4. 定义指向基类的指针
sp = new Circle(10);
cout<<sp->GetPerim()<<endl; // 5. 输出圆的周长
sp = new Rectangle(6, 4);
cout<<sp->GetPerim()<<endl; // 6. 输出矩形的周长
delete sp;
return 0;
}
```
在代码中,我们做了以下修改:
1. 在基类Shape中添加了虚析构函数,以确保在通过基类指针删除派生类对象时能够正确调用派生类的析构函数。
2. 在基类Shape中添加了纯虚函数GetPerim(),以确保派生类必须实现该函数。
3. 在派生类Rectangle和Circle中分别实现了GetPerim()函数。
4. 在main函数中定义了一个指向基类的指针sp。
5. 通过指针sp创建了一个Circle对象,并调用了GetPerim()函数输出圆的周长。
6. 通过指针sp创建了一个Rectangle对象,并调用了GetPerim()函数输出矩形的周长。
因此,输出结果为62.8和20。
阅读全文