如何从另一个类参数访问类构造函数参数 与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!同样抱歉的是,对于糟糕的凌乱代码,我在这方面很在行,但仍在学习。同样抱歉的是,对于糟糕的凌乱代码,我在这方面很在行,但仍在学习。