“Point”: 没有合适的默认构造函数可用
时间: 2023-10-02 19:03:24 浏览: 130
这个错误提示意味着你在使用 `Point` 类时,没有提供合适的默认构造函数。默认构造函数是没有任何参数的构造函数,如果你没有定义它,编译器就会报这个错误。
你可以通过在 `Point` 类中添加一个无参的构造函数来解决这个问题。例如:
```c++
class Point {
public:
Point() {} // 默认构造函数
Point(int x, int y) : m_x(x), m_y(y) {}
private:
int m_x;
int m_y;
};
```
当你使用 `Point` 类时,如果你只是声明一个 `Point` 对象而没有提供构造函数参数,编译器就会调用这个默认构造函数来创建 `Point` 对象。
相关问题
父类:point 数据成员 构造函数 求面积函数 子类:Rectangle 数据成员 构造函数 求面积函数 普通函数fun(Point &s) 利用它调用求面积函数 主函数
好的,我理解了你的问题。这是一个关于继承的例子,父类是Point类,子类是Rectangle类。Rectangle类继承了Point类的数据成员和函数,并添加了一个新的函数fun。下面是一个示例代码,包含了Point类、Rectangle类、以及主函数:
```c++
#include <iostream>
using namespace std;
class Point {
protected:
int x, y;
public:
Point(int x, int y) {
this->x = x;
this->y = y;
}
virtual double area() { // 求面积函数
return 0;
}
};
class Rectangle : public Point {
private:
int w, h;
public:
Rectangle(int x, int y, int w, int h) : Point(x, y) {
this->w = w;
this->h = h;
}
double area() { // 求面积函数
return w * h;
}
void fun(Point &s) { // 普通函数
cout << "面积:" << s.area() << endl;
}
};
int main() {
Point p1(0, 0);
Rectangle r1(0, 0, 2, 3);
cout << "Point的面积:" << p1.area() << endl;
cout << "Rectangle的面积:" << r1.area() << endl;
r1.fun(p1);
return 0;
}
```
在上面的代码中,Point类有一个构造函数,以及一个求面积的虚函数。Rectangle类继承了Point类,并添加了一个新的构造函数、一个新的求面积函数、以及一个普通函数fun。在主函数中,我们创建了一个Point对象p1和一个Rectangle对象r1,并分别输出它们的面积。然后,我们调用Rectangle对象r1的函数fun,传入一个Point对象p1,该函数会调用Point对象p1的求面积函数,并输出其面积。
输出结果如下:
```
Point的面积:0
Rectangle的面积:6
面积:0
```
可以看到,Point对象p1的面积为0,Rectangle对象r1的面积为6,而调用Rectangle对象r1的函数fun时,传入的是一个Point对象p1,该对象的面积为0。
课前测 父类:point 数据成员 构造函数 求面积函数 子类:Rectangle 数据成员 构造函数 求面积函数 普通函数fun(Point&s) 利用它调用求面积函数
好的,我理解您的问题了。这是一个关于面向对象编程的问题,您想要一个父类 Point 和一个子类 Rectangle,Point 有数据成员和求面积函数,Rectangle 继承自 Point 并且增加了数据成员和求面积函数。另外,您想要一个普通函数 fun,它接受一个 Point 的引用,并且利用它调用求面积函数。那么,我来给您提供一份代码示例:
```cpp
#include <iostream>
using namespace std;
class Point {
protected:
double x, y;
public:
Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
virtual double area() const { return 0; } // 该函数是虚函数,因为我们将使用多态
};
class Rectangle : public Point {
private:
double width, height;
public:
Rectangle(double _x = 0, double _y = 0, double w = 0, double h = 0) : Point(_x, _y), width(w), height(h) {}
virtual double area() const { return width * height; } // 重写父类的求面积函数
};
void fun(Point& s) {
cout << "The area of this shape is: " << s.area() << endl;
}
int main() {
Rectangle r(0, 0, 2, 3);
fun(r); // 调用普通函数,利用 Point 的引用调用子类 Rectangle 的求面积函数
return 0;
}
```
在这个代码示例中,我们定义了一个父类 Point 和一个子类 Rectangle。Point 有两个数据成员 x 和 y,还有一个虚函数 area,它返回值为 0,因为 Point 没有面积这个属性。Rectangle 继承自 Point,并且增加了两个数据成员 width 和 height,还重写了父类的求面积函数。我们还定义了一个普通函数 fun,它接受一个 Point 的引用,然后调用该对象的求面积函数。在主函数中,我们创建了一个 Rectangle 的对象 r,然后用 fun 函数来调用它的求面积函数。注意,我们传递的是 Point 的引用,但实际上会调用 Rectangle 的求面积函数,这是因为我们使用了多态。
相关推荐
![text/x-c++](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)