小白求助 拷贝构造函数问题
#include "iostream"using std::endl;
using std::cout;
using std::cin;
class Test
{
private:
int a;
int b;
public:
Test(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
public:
Test(const Test& t)
{
this->a = t.a + 10;
this->b = t.b + 10;
}
public:
void printTest()
{
cout << this->a << " " << this->b << endl;
}
};
Test fun()
{
Test t1(11, 22);
return t1;//第一次调用copy构造
}
void main()
{
Test t2 = fun();//第二次调用copy构造 匿名对象转为t2
t2.printTest();
system("pause");
}
问题 return t1的时候 调用一次copy构造 Test t2 = fun()调用一次拷贝构造 t2.printTest()应该是31,42才对 为啥是21 32 ? Test fun()
{
Test t1(11, 22);
return t1;//第一次调用copy构造这个是调用匿名对象的拷贝构造函数
} C:\Users\Administrator\Desktop\copy构造疑问.png 琴长不过时光 发表于 2020-4-21 18:34
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
本帖最后由 jkluoling1992 于 2020-4-21 18:49 编辑
这个函数就调用了一次构造函数,哪里来的两次呢?,你写的第二次就是第一次调用构造函数并且返回给t2 这个嘛,你想的东西对了一半。你的这段代码什么时候会发生拷贝构造呢?一定是去调用fun函数的时候,return这个语句生效了会立即拷贝构造一个新对象。
但是,给匿名对象一个名字,这个操作不会用到拷贝构造函数,这里面不会有新对象产生。
你应该是被Test t2=t1这种情况需要调用拷贝构造给迷惑了,这里要拷贝是因为创建新对象t2。但是给匿名对象名字,就像Test t2=&t1一样,只是多个名字,不需要创建新对象 liuzhengyuan 发表于 2020-4-21 18:41
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
知道了 本帖最后由 倒戈卸甲 于 2020-4-21 20:10 编辑
话说我记得你不是很久以前问过一个对象作引用的问题吗?一些需要链式编程的场合才需要返回对象本身,以便能再次合法调用其成员方法。怎么现在倒退了若干步,回到拷贝构造来了{:10_256:} 倒戈卸甲 发表于 2020-4-21 20:03
话说我记得你不是很久以前问过一个对象作引用的问题吗?一些需要链式编程的场合才需要返回对象本身,以便能 ...
你还记得呢 我最近在弄逆向 和 复习以前的知识点 琴长不过时光 发表于 2020-4-22 13:45
你还记得呢 我最近在弄逆向 和 复习以前的知识点
因为你说你想搞底层,学汇编。很难没印象。c++的内存机制相当复杂,能利用指针进行自由度很大的操控,同时c++又开创了面向对象的各个特性,那都是些未曾删繁就简的原汁原味的语法。所以大家都认为c++是最难的主流编程语言。汇编就更不用说了,贴近机器语言,最难语言这个称号绝对有它的份。
所以其实你很有想法。
不过我内心深处也觉得深入学习c++,学个一年半载能有不少收获,再了解些汇编,能更好理解计算机。可惜我这个身体状况和精神状态都不太能在这两门语言上深入太多
倒戈卸甲 发表于 2020-4-22 14:09
因为你说你想搞底层,学汇编。很难没印象。c++的内存机制相当复杂,能利用指针进行自由度很大的操控,同 ...
老弟你身体咋了我身体也不好 不能出去打工 只能学学代码 琴长不过时光 发表于 2020-4-22 17:49
老弟你身体咋了我身体也不好 不能出去打工 只能学学代码
当初年少轻狂,纵欲过度,如今身体空虚,只能徒然叹息啊{:10_256:}
好吧,其实是这些年脑子的思维能力下降了,一些真正有技术性且有创造性的项目明显玩不转。只能往一些靠经验累积的方向发展。 倒戈卸甲 发表于 2020-4-22 18:02
当初年少轻狂,纵欲过度,如今身体空虚,只能徒然叹息啊
好吧,其实是这些年脑子的思维能力下 ...
我去 你年龄有我大吗?加个QQ 我QQ7\9\1\9\1\4\7\8\1 验证码我好友发你 倒戈卸甲 发表于 2020-4-22 18:02
当初年少轻狂,纵欲过度,如今身体空虚,只能徒然叹息啊
好吧,其实是这些年脑子的思维能力下 ...
我加你好友了 论坛好友 一起学吧
我逻辑能力感觉有点差 不能和17 8岁的小伙子相比 倒戈卸甲 发表于 2020-4-22 14:09
因为你说你想搞底层,学汇编。很难没印象。c++的内存机制相当复杂,能利用指针进行自由度很大的操控,同 ...
事业有成就的前提都是身体能够坚持下来,好好锻炼身体啊{:10_257:}
页:
[1]