类构造函数参数 C++
我正在为 ax 和 y 笛卡尔坐标系创建一个pair1类。 x 和 y 是双精度数。我需要有 3 个构造函数。
- 无参数,默认 x 和 y 为零。
- 一种争论分配 x 并将 y 默认为零。
- 一个参数将 x 默认为零并分配 y。我不确定我是否正确设置了班级。我收到以下错误:
pair1::pair1(double)
和pair1::pair1(double)
无法重载。
我的班级:
class pair1
{
private:
double x;
double y;
public:
pair1(){ x = 0.0, y = 0.0; }
pair1( double a ){ x = a; y =0.0; }
pair1(double b){ x = 0.0; y = b; }
};
I am creating a pair1 class for a x and y Cartesian coordinate system. x and y are doubles. I need to have 3 constructors.
- No arguments, defaults x and y to zero.
- One arguement assigns x and defaults y to zero.
- One arugeument defaults x to zero and assigns y. I'm not sure if I am setting up the class right. I get the follwing error:
pair1::pair1(double)
andpair1::pair1(double)
cannot be overloaded.
My class:
class pair1
{
private:
double x;
double y;
public:
pair1(){ x = 0.0, y = 0.0; }
pair1( double a ){ x = a; y =0.0; }
pair1(double b){ x = 0.0; y = b; }
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这很容易
这是一个问题。当你只有一个参数时,你怎么知道应该调用这两个参数中的哪一个?这就是您收到编译错误的原因。
相反 - 使用默认构造函数(不带参数的构造函数)、完整构造函数(同时包含两者的构造函数)(如果需要)以及
SetX()
和SetY()
进行设置X和Y分开,并通过函数名称进行区分。That's easy
That's a problem. How do you know, when you only have one parameter, which of the two is meant to be called? That's why you get a compilation error.
Instead - use the default constructor (the one with no parameters), full constructor (the one with both), if needed, and
SetX()
andSetY()
to set the X and Y separately, and make distinction by the name of the function.问题是编译器没有办法区分
和
确实,除了参数名称之外,它们是相同的东西。例如:
这称为模糊重载。
The problem is that the compiler has no way to distinguish
and
Indeed, they are the same thing except for the name of the parameter. For example:
This is called ambiguous overloading.
这些是完全相同的构造函数。不同的参数名称没有任何区别。对于重载而言,最重要的是类型的类型和数量以及它们的顺序。
These are exactly same constructor. Different parameter name doesn't make any difference. All that matters for overloading is, the type(s) and number of types, and their ordering.
我不确定除 (0,0) 情况外的默认参数是否有任何用处,但类似这样的方法可以工作:
使用:
I'm not sure that having default arguments except for the (0,0) case is of any use, but something like this could work:
Use: