#include <iostream> using namespace std; class Shape{ private: int x; int y; public: Shape(){} Shape(int a,int b):x(a),y(b) { } }; class Rectangle:public Shape{ private: int area,perimeter; public: Rectangle():Shape(x,y){ area=x*y; perimeter=(x+y)*2; } //Rectangle( int x,int y):Shape(x,y){ //area=x*y; // perimeter=(x+y)*2; //} void show(){ cout<<area<<" "<<perimeter<<endl; } }; int main(){ int x,y; cin>>x>>y; Shape x1(x,y); Rectangle x2(); x2.gets(); return 0: }
时间: 2023-06-14 15:05:22 浏览: 130
这段代码有一些问题,我先解释一下:
1. 在 Rectangle 类的构造函数中,需要先调用基类 Shape 的构造函数来初始化 x 和 y,但是在代码中没有传递 x 和 y 的值给 Shape。
2. 在 main 函数中,创建了一个 Shape 类型的对象 x1,但是没有使用。同时,创建了一个 Rectangle 类型的对象 x2,但是没有传递 x 和 y 的值给它。
3. 在 Rectangle 类中,定义了一个不带参数的构造函数,但是没有定义一个带参数的构造函数,所以如果要传递 x 和 y 的值,就需要再定义一个带参数的构造函数。
下面是修正后的代码:
```
#include <iostream>
using namespace std;
class Shape{
protected:
int x;
int y;
public:
Shape(int a=0, int b=0):x(a),y(b){}
};
class Rectangle:public Shape{
private:
int area, perimeter;
public:
Rectangle(int a=0, int b=0):Shape(a,b){
area = x * y;
perimeter = 2 * (x + y);
}
void show(){
cout << area << " " << perimeter << endl;
}
};
int main(){
int x, y;
cin >> x >> y;
Rectangle x2(x, y); // 创建 Rectangle 对象时传递 x 和 y 的值
x2.show(); // 输出结果
return 0;
}
```
现在这段代码就可以正确地创建 Rectangle 对象,并输出结果了。
阅读全文