如何从另一个类参数访问类构造函数参数 与C++构造函数参数争用 我刚刚从TS/JS/PY中来,试图理解C++概念。但我正在努力使用类的构造函数参数来声明参数的默认值。下面是我试图运行的代码: double Phythagorean_Hypotenuse (int& a, int& b ) { return sqrt((a * a) + (b * b)); }; class Triangle { public: int a; int b; double c; Triangle(int a_param, int b_param, double c_param = Phythagorean_Hypotenuse(a_param, b_param)) { a = a_param; b = b_param; c = c_param; } };

如何从另一个类参数访问类构造函数参数 与C++构造函数参数争用 我刚刚从TS/JS/PY中来,试图理解C++概念。但我正在努力使用类的构造函数参数来声明参数的默认值。下面是我试图运行的代码: double Phythagorean_Hypotenuse (int& a, int& b ) { return sqrt((a * a) + (b * b)); }; class Triangle { public: int a; int b; double c; Triangle(int a_param, int b_param, double c_param = Phythagorean_Hypotenuse(a_param, b_param)) { a = a_param; b = b_param; c = c_param; } };,c++,class,parameters,constructor,arguments,C++,Class,Parameters,Constructor,Arguments,以及主要功能的内部 Triangle mytri_1(10, 20); std::cout << mytri_1.a << std:endl; 或 [错误]对“Triangle::Triangleint,int,double”的调用使用参数3的默认参数,该参数尚未定义 那么,拜托,有人能解决这个问题吗 谢谢。正如编译器所指出的,其他构造函数参数不能作为c_param参数的默认参数使用。不要使用默认值,只需重载构造函数,包括只接受2个参数的构造函数。然后,此构造函数可以调

以及主要功能的内部

Triangle mytri_1(10, 20);
std::cout << mytri_1.a << std:endl;

[错误]对“Triangle::Triangleint,int,double”的调用使用参数3的默认参数,该参数尚未定义 那么,拜托,有人能解决这个问题吗


谢谢。

正如编译器所指出的,其他构造函数参数不能作为c_param参数的默认参数使用。不要使用默认值,只需重载构造函数,包括只接受2个参数的构造函数。然后,此构造函数可以调用另一个接受所有3项的构造函数:

 // Constructor overload that accepts all 3 parameters
 Triangle(int a_param, int b_param, double c_param):
  a(a_param), b(b_param), c(c_param) {
  }

  // Constructor overload that accepts just a and b, call the other constructor
  // to set all 3 members
  Triangle(int a_param, int b_param):
  Triangle(a_param, b_param, Phythagorean_Hypotenuse(a_param, b_param)) {
  }

正如编译器所指出的,其他构造函数参数不能作为c_param参数的默认参数使用。不要使用默认值,只需重载构造函数,包括只接受2个参数的构造函数。然后,此构造函数可以调用另一个接受所有3项的构造函数:

 // Constructor overload that accepts all 3 parameters
 Triangle(int a_param, int b_param, double c_param):
  a(a_param), b(b_param), c(c_param) {
  }

  // Constructor overload that accepts just a and b, call the other constructor
  // to set all 3 members
  Triangle(int a_param, int b_param):
  Triangle(a_param, b_param, Phythagorean_Hypotenuse(a_param, b_param)) {
  }

默认参数值不能引用其他参数。您可以定义两个重载,其中一个重载委托给另一个重载,以执行所需操作:

class Triangle {
public:
    double a;
    double b;
    double c;

    Triangle(double a_param, double b_param, double c_param)
        : a{a_param},
          b{b_param},
          c{c_param}
    {}

    Triangle(double a_param, double b_param)
        : Triangle{a_param, b_param, Phythagorean_Hypotenuse(a_param, b_param)}
    {}
};
其他一些注意事项:

类构造函数没有返回类型。我改变了虚空三角形。。。三角形。。。 我在构造函数的主体中使用了构造函数初始化列表而不是赋值。对于像int或double这样的小原语值可能没有什么区别,但这是一个好习惯,对于更复杂的类型可能会有很大的区别 int对于c、a或b的类型没有意义。三角形的边不可能都是整数 没有理由通过引用将参数传递给勾股斜边。按值传递它们更简单,而且可能更快
默认参数值不能引用其他参数。您可以定义两个重载,其中一个重载委托给另一个重载,以执行所需操作:

class Triangle {
public:
    double a;
    double b;
    double c;

    Triangle(double a_param, double b_param, double c_param)
        : a{a_param},
          b{b_param},
          c{c_param}
    {}

    Triangle(double a_param, double b_param)
        : Triangle{a_param, b_param, Phythagorean_Hypotenuse(a_param, b_param)}
    {}
};
其他一些注意事项:

类构造函数没有返回类型。我改变了虚空三角形。。。三角形。。。 我在构造函数的主体中使用了构造函数初始化列表而不是赋值。对于像int或double这样的小原语值可能没有什么区别,但这是一个好习惯,对于更复杂的类型可能会有很大的区别 int对于c、a或b的类型没有意义。三角形的边不可能都是整数 没有理由通过引用将参数传递给勾股斜边。按值传递它们更简单,而且可能更快
有一些问题会阻止您的代码编译,即:

构造函数没有返回类型。 double c_param=Phythagorean_斜边sea_param,b_param对参数无效,a_param,b_param将无法识别。 建议更改:

由于抵押计算的结果很可能是一个十进制值,因此c应该是一个双精度值

您可以这样做:


有一些问题会阻止您的代码编译,即:

构造函数没有返回类型。 double c_param=Phythagorean_斜边sea_param,b_param对参数无效,a_param,b_param将无法识别。 建议更改:

由于抵押计算的结果很可能是一个十进制值,因此c应该是一个双精度值

您可以这样做:


谢谢,我真的很感谢你的帮助,@anastaciu@azizbekmasharibov,谢谢你,我的朋友,我很高兴我的回答帮助了你。谢谢,我真的很感谢你的帮助,@anastaciu@azizbekmasharibov,谢谢你,我的朋友,我很高兴我的回答帮助了你。哇,谢谢你清楚的解释,真的很感谢。总之,非常感谢,@Miles Budnek!哇,谢谢你的解释,真的很感激。总之,非常感谢,@Miles Budnek!同样抱歉的是,对于糟糕的凌乱代码,我在这方面很在行,但仍在学习。同样抱歉的是,对于糟糕的凌乱代码,我在这方面很在行,但仍在学习。