C++中创建类对象时出现问题

我定义了一个tStu类,有带参数的构造函数和不带参数的构造函数,在主函数中使用以下语句会出现不同情况,求高手解答:tStuA(1,2,3);//编译通过,运行正常tStu... 我定义了一个tStu类,有带参数的构造函数和不带参数的构造函数,在主函数中使用以下语句会出现不同情况,求高手解答:
tStu A(1,2,3); //编译通过,运行正常
tStu B; //编译通过,运行正常
tStu C(A); //编译通过,运行正常,不过这种方式貌似是自动生成的,在自动完成提示中有这种定义:tStu(const &tStu),可我自己没有定义,是自动生成的吗?什么情况会生成?
tStu D(); //编译失败,提示外部错误。
展开
 我来答
对床话雨
推荐于2018-04-21 · TA获得超过1636个赞
知道小有建树答主
回答量:171
采纳率:100%
帮助的人:153万
展开全部
第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。

第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
第四种,这种定义类对象,是错误的语法,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,所以编译器会报错。
帐号已注销
2016-09-20 · TA获得超过1028个赞
知道小有建树答主
回答量:860
采纳率:37%
帮助的人:165万
展开全部
第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。

第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。首先这是个静态函数,静态的成员函数,其实跟全局的函数区别不大,就是不属于成员函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8c0402a593
2014-04-30 · 超过14用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:43.1万
展开全部
tStu(const &tStu):这个是拷贝构造函数,你用这个tStu C(A); 就得要有拷贝构造函数啊。你去看看关于深拷贝和浅拷贝相关的C++的知识。还有,你最后那个tStu D(),你要这样写的话,你的构造函数,就得是有默认形参的。不然,就认为,没有这个构造函数,所以编译失败啊。tStu B;这个是自动调用没有参数的构造函数的
追问
那默认形参是这样写吗?
tStu(double x=0,double y=0,double z=0);
在头文件对应的cpp文件中实现时好像又不能把那个=0什么的写上,说是什么重复定义,该怎么解决?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
野林古风
2015-10-26 · TA获得超过3637个赞
知道大有可为答主
回答量:3655
采纳率:69%
帮助的人:704万
展开全部
同样一个问题,每天都在列表,烦不烦?

第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。

第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
第四种,这种定义类对象,是错误的语法,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,所以编译器会报错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式