C++ 对象的初始化和赋值的区别
在C++中,为什么对象的初始化(将一个对象赋值给另一个对象)需要复制构造函数,而对象的赋值却不用,对象的初始化和赋值究竟有什么区别?比如有一个类:classstudent...
在C++中,为什么对象的初始化(将一个对象赋值给另一个对象)需要复制构造函数,而对象的赋值却不用,对象的初始化和赋值究竟有什么区别?
比如有一个类:class student,而且已有一个对象 stu1;
student stu2=stu1; 我觉得程序做了3件事:
这时,就调用了 复制构造函数 ,
1.调用默认构造函数 student stu2();
2.调用 复制构造函数
3.赋值
不知对不对? 展开
比如有一个类:class student,而且已有一个对象 stu1;
student stu2=stu1; 我觉得程序做了3件事:
这时,就调用了 复制构造函数 ,
1.调用默认构造函数 student stu2();
2.调用 复制构造函数
3.赋值
不知对不对? 展开
展开全部
yili16438 那个解释不对。
整个表达式只做了一件事情就是调用复制构造函数, 没有默认构造也没有赋值。 student stu2=stu1; 等价于括号的写法 student stu2(stu1);
声明语句中的=和表达式中的=完全是两个语法功能, 不能混为一谈
要说差别, 如果你把这些东西都当作函数来看那么区别就是很明确的: 它们调用的函数不一样。 按语法来看, 各种构造只发生在对象产生的时候, operator=只发生在对象产生之后。
整个表达式只做了一件事情就是调用复制构造函数, 没有默认构造也没有赋值。 student stu2=stu1; 等价于括号的写法 student stu2(stu1);
声明语句中的=和表达式中的=完全是两个语法功能, 不能混为一谈
要说差别, 如果你把这些东西都当作函数来看那么区别就是很明确的: 它们调用的函数不一样。 按语法来看, 各种构造只发生在对象产生的时候, operator=只发生在对象产生之后。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询