c++自定义无参构造函数后 ,定义一个该类的对象时显示,多个默认构造函数,什么原因呢?

浏览:41日期:2023-04-15

问题描述

1,c++自定义无参构造函数后 ,定义一个该类的对象时显示,多个默认构造函数,什么原因呢?2,相关代码如下:

include<iostream>

using namespace std;class point{public:

point();point(int xx, int yy);int getx(){ return x;}int gety(){ return y;}

private:

int x;int y;

};point::point(int xx = 0, int yy = 0){

x = xx;y = yy;

}

point::point(){

x = 0;y = 0;

}int main(){

point a; ***//出现编译错误***point b(1, 2);

}

运行后,point a;这句代码编译出错

错误如下:严重性 代码 说明 项目 文件 行错误 C2668 “point::point”: 对重载函数的调用不明确 JD_EX e:c++primerjd_exjd_ext11.cpp 39

严重性 代码 说明 项目 文件 行错误(活动)类 'point' 包含多个默认构造函数 JD_EX e:c++primerJD_EXJD_EXt11.cpp 39

是需要自己定义一个默认构造函数,point()=defaul:吗?那这个无参的构造函数,该怎么调用呢?谢谢大神 ,麻烦帮忙解答。。

问题解答

回答1:

class Point{ int x; int y; public: //这样写的话,直接Point test;可以调用下面的这个构造函数,因为有默认参数值啊 //但是如果你还有无参数的构造函数,编译器就会报错,告诉你有歧义 Point(int a = 0, int b = 0) : x(a), y(b) {}/* 这和上面那个构造函数会在用Point test;定义对象时,产生歧义,因为都可以不用参数啊。 Point() {}这和上面那个差不多 Point() = default; */};

更多关于default的知识,可以参看这个链接,简单说了一下。http://stackoverflow.com/ques...

下次提问后,看看版面啊。。。。

回答2:

point::point(int xx = 0, int yy = 0){

x = xx;y = yy;}因为你的这个构造函数有默认形参,可以作为无参数的构造函数用,所以你再定义一个无参数的构造函数就是重载失败。并且你一旦定义了构造函数,编译器是不会再合成默认构造函数的。把Point()去掉即可,多余了。仅供参考。

相关文章: