C++中创建类对象时出现问题
我定义了一个tStu类,有带参数的构造函数和不带参数的构造函数,在主函数中使用以下语句会出现不同情况,求高手解答:tStuA(1,2,3);//编译通过,运行正常tStu...
我定义了一个tStu类,有带参数的构造函数和不带参数的构造函数,在主函数中使用以下语句会出现不同情况,求高手解答:
tStu A(1,2,3); //编译通过,运行正常
tStu B; //编译通过,运行正常
tStu C(A); //编译通过,运行正常,不过这种方式貌似是自动生成的,在自动完成提示中有这种定义:tStu(const &tStu),可我自己没有定义,是自动生成的吗?什么情况会生成?
tStu D(); //编译失败,提示外部错误。 展开
tStu A(1,2,3); //编译通过,运行正常
tStu B; //编译通过,运行正常
tStu C(A); //编译通过,运行正常,不过这种方式貌似是自动生成的,在自动完成提示中有这种定义:tStu(const &tStu),可我自己没有定义,是自动生成的吗?什么情况会生成?
tStu D(); //编译失败,提示外部错误。 展开
4个回答
展开全部
第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。
第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。首先这是个静态函数,静态的成员函数,其实跟全局的函数区别不大,就是不属于成员函数
第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。首先这是个静态函数,静态的成员函数,其实跟全局的函数区别不大,就是不属于成员函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
tStu(const &tStu):这个是拷贝构造函数,你用这个tStu C(A); 就得要有拷贝构造函数啊。你去看看关于深拷贝和浅拷贝相关的C++的知识。还有,你最后那个tStu D(),你要这样写的话,你的构造函数,就得是有默认形参的。不然,就认为,没有这个构造函数,所以编译失败啊。tStu B;这个是自动调用没有参数的构造函数的
追问
那默认形参是这样写吗?
tStu(double x=0,double y=0,double z=0);
在头文件对应的cpp文件中实现时好像又不能把那个=0什么的写上,说是什么重复定义,该怎么解决?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同样一个问题,每天都在列表,烦不烦?
第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。
第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
第四种,这种定义类对象,是错误的语法,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,所以编译器会报错。
第一种,是调用带参数的构造函数,显而易见,你定义的是一个带三个参数的构造函数,没问题,OK。
第二种,是调用的是不带参数的构造函数,不定义的话,编译器会默认一个,没问题,OK。
第三种,调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
第四种,这种定义类对象,是错误的语法,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,所以编译器会报错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询