C++ C+中的构造函数重载问题+; //创建一个函数,该函数接受两个点对象并计算这些点之间的距离 #包括 #包括 使用名称空间std; 阶级区{ int x,y; 公众: 地区(内部a、内部b){ x=a; y=b; } dist(); 空隙距离(距离c1、距离c2){ //c1=(8,9)和c2(10,7) //sqrt((10-8)^2+(7-9)^2) //sqrt((c2.a-c1.a)^2+(c2.b-c1.b)^2) int res=sqrt(功率((c2.x-c1.x),2)+功率((c2.y-c1.y),2)); 不能将构造函数定义为 dist():x(0),y(0){

C++ C+中的构造函数重载问题+; //创建一个函数,该函数接受两个点对象并计算这些点之间的距离 #包括 #包括 使用名称空间std; 阶级区{ int x,y; 公众: 地区(内部a、内部b){ x=a; y=b; } dist(); 空隙距离(距离c1、距离c2){ //c1=(8,9)和c2(10,7) //sqrt((10-8)^2+(7-9)^2) //sqrt((c2.a-c1.a)^2+(c2.b-c1.b)^2) int res=sqrt(功率((c2.x-c1.x),2)+功率((c2.y-c1.y),2)); 不能将构造函数定义为 dist():x(0),y(0){,c++,constructor,constructor-overloading,C++,Constructor,Constructor Overloading,dist()只是一个声明,但是您还没有定义构造函数。因为您定义了接受两个ints的构造函数,编译器不会为您合成默认构造函数,所以最好将默认构造函数定义为用户定义的默认构造函数(没有初始化列表)。如dist()=default; 不过,请注意,在这种情况下,内置类型的成员将没有初始值。因此,在默认构造函数中为内置类型的数据成员提供初始值被认为是更好的做法。 像这样: 此构造函数将处理这两种情况。这是因为您已经声明了但没有定义默认构造函数。但是,考虑一下,使函数计算距离的函数是一个接受两个“点”的自

dist()
只是一个声明,但是您还没有定义构造函数。

因为您定义了接受两个
int
s的构造函数,编译器不会为您合成默认构造函数,所以最好将默认构造函数定义为用户定义的默认构造函数(没有初始化列表)。如
dist()=default;

不过,请注意,在这种情况下,内置类型的成员将没有初始值。因此,在默认构造函数中为内置类型的数据成员提供初始值被认为是更好的做法。 像这样:


此构造函数将处理这两种情况。

这是因为您已经声明了但没有定义默认构造函数。但是,考虑一下,使函数计算距离的函数是一个接受两个“点”的自由函数。然后返回一个可以稍后打印的浮点值。我认为除了访问私有变量之外,没有必要将
caldistance
作为成员函数。这可以通过使函数成为类的
friend
来解决。这是可以做到的,但我只是想尝试如何在这个wa中使用构造函数y、 我的目标不是解决这个问题,而是学习构造函数的使用,
dist(){}
——这使得
x
y
未初始化。这段代码会变得疯狂:
distd1;distd2;distg;G.calculate(d1,d2);
后面不需要分号@PaulMcKenzie要初始化
x
y
,需要一个单独的构造函数defined@DeepakGouda你在评论中看到我的例子了吗?未初始化和未初始化之间的距离是多少?一个简单的
dist():x(0),y(0){
可能已经足够了。所有构造函数都应该将成员初始化为某个值,而不是像我给出的示例中那样让它们处于未初始化状态,从而被滥用。@PaulMcKenzie在这个问题中,作者打算通过构造函数对对象d1和d2进行初始化。因此,我没有在构造函数中指定任何默认值。我同意,有一些默认值是一个很好的做法。谢谢你的建议。
// Create a function which takes 2 point objects and computes the distance between those points
#include<iostream>
#include<cmath>
using namespace std;

class dist{
    int x, y;    
public:
    dist(int a , int b) {
        x = a;
        y = b;
    }
    dist();
    void caldistance(dist c1, dist c2) {
        // c1 = (8,9) & c2 (10, 7)
        // sqrt((10-8)^2 + (7-9)^2)
        // sqrt((c2.a-c1.a)^2 + (c2.b-c1.b)^2)
        int res = sqrt(pow((c2.x-c1.x),2)+pow((c2.y-c1.y),2));
        cout << "The Distance between the points ( " << c1.x << "," << c1.y << ")"  << "("<< c2.x << "," << c2.y << ")" << " is : " << res << endl;
    }
};

int main() {
    dist P(8,9);
    dist Q(11,6);
    dist G;
    G.caldistance(P,Q);
    
    return 0;
}
dist(int val_x = 0, int val_y = 0) : x(val_x), y(val_y) {}