#include<iostream> using namespace std; class CPoint { private: double x,y; public : CPoint (double i,double j); double Getx(); double Gety(); double Setpoint(double i,double j); }; class CShape { public: CPoint point; virtual double Area() { return 0.0; } }; class CCircle:public CShape { public: float r; CCircle(CPoint p1,float r=2):r(r){} double Area() { return 3.14*r*r; } }; class CRect:public CShape { public: double x,y; CRect(CPoint p1,double x=2,double y=1):x(x),y(y){} double Area() { return x*y; } }; class CEll:public CShape { public: double x,y; CEll(CPoint p1,double x=2,double y=1); double Area() { return 3.14*x*y; } }; int main() { return 0; }error: use of deleted function 'CShape::CShape()' CCircle(CPoint p1,float r=2):r(r){} ^ compilation terminated due to -Wfatal-errors.
时间: 2024-04-05 13:34:00 浏览: 51
这段代码存在一个错误,编译时会提示 use of deleted function 'CShape::CShape()' 。这是因为 CShape 类中没有默认构造函数,所以在 CCircle 和 CRect 的构造函数中需要显式调用 CPoint 的构造函数来初始化 point 成员变量。可以修改 CCircle 和 CRect 的构造函数如下:
CCircle(CPoint p1, float r = 2) : CShape(), r(r) {}
CRect(CPoint p1, double x = 2, double y = 1) : CShape(), x(x), y(y) {}
同时,CEll 的构造函数在代码中没有实现,也需要实现并显式调用 CShape 的构造函数来初始化 point 成员变量。
相关问题
#include<iostream> using namespace std; class CPoint { private: double x,y; public : CPoint (double i,double j); double Getx(); double Gety(); double Setpoint(double i,double j); }; class CShape { public: CPoint point; virtual double Area() { return 0.0; } }; class CCircle:public CShape { public: float r; CCircle(CPoint p1,float r=2):r(r){} double Area() { return 3.14*r*r; } }; class CRect:public CShape { public: double x; double y; CRect(CPoint p1,double x=2,double y=1):x(x),y(y) {} double Area() { return x*y; } }; class CEll:public CShape { double x; double y; CEll(CPoint p1,double x=2,double y=1); double Area() { return 3.14*x*y; } }; int main() { return 0; }有什么问题?怎么改正?
这段代码存在一个问题,即CEll类的构造函数是私有的,无法在main函数中创建CEll对象。需要将CEll类的构造函数改为公有的。
修改后的代码如下:
```
#include<iostream>
using namespace std;
class CPoint {
private:
double x,y;
public :
CPoint (double i,double j);
double Getx();
double Gety();
double Setpoint(double i,double j);
};
class CShape {
public:
CPoint point;
virtual double Area()
{
return 0.0;
}
};
class CCircle:public CShape {
public:
float r;
CCircle(CPoint p1,float r=2):r(r){}
double Area()
{
return 3.14*r*r;
}
};
class CRect:public CShape {
public:
double x;
double y;
CRect(CPoint p1,double x=2,double y=1):x(x),y(y) {}
double Area()
{
return x*y;
}
};
class CEll:public CShape {
public:
double x;
double y;
CEll(CPoint p1,double x=2,double y=1):x(x),y(y){}
double Area()
{
return 3.14*x*y;
}
};
int main() {
return 0;
}
```
定义一个点类CPoint,有数据成员横坐标double x,纵坐标double y。成员函数abs()返回点到原点的距离。补充完整程序代码,使得程序能够正确运行。 【输入形式】
首先,让我们完成`CPoint`类的定义,包括输入、输出和计算距离到原点的功能:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class CPoint {
public:
// 构造函数,接受默认值(0,0)
CPoint(double x = 0.0, double y = 0.0) : x(x), y(y) {}
// 输入函数,获取用户的坐标值
void InputCoordinates() {
cout << "请输入点的坐标 (横坐标 x, 纵坐标 y): ";
cin >> x >> y;
}
// 计算并返回点到原点的距离
double AbsDistance() const {
return sqrt(x * x + y * y);
}
// 输出点到原点的距离
void OutputAbsDistance() const {
cout << "点(" << x << ", " << y << ")到原点的距离: " << AbsDistance() << endl;
}
private:
double x, y; // 私有数据成员,保护坐标信息
};
int main() {
CPoint point;
point.InputCoordinates();
point.OutputAbsDistance();
return 0;
}
```
在这个版本中,我将原来的`input()`和`output()`方法分别改为了`InputCoordinates()`和`OutputAbsDistance()`,更直观地表示它们的操作。现在,当运行这个程序时,它会提示用户输入点的坐标,并输出该点到原点的距离。
阅读全文