c++拷贝初始化为什么调用的是普通的构造函数?

我对C++中的类了解的不够深入,遇到了关于类的拷贝构造函数的问题。请教一下。按照教程,我写了一个student类头文件,含私有数据成员*name,*num,age。成员函数包括构造函数,拷贝构造... 我对C++中的类了解的不够深入,遇到了关于类的拷贝构造函数的问题。请教一下。
按照教程,我写了一个student类头文件,含私有数据成员*name,*num,age。成员函数包括构造函数,拷贝构造函数、析构函数等。
然后在cpp文件中包含一个使用类的拷贝构造函数的函数,并在main()函数中调用他。
问题:在定义时直接调用函数和先定义后调用,区别在什么地方?希望讲的透彻些。


· 做真实的自己 用良心做教育

千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

--在定义时直接调用函数和先定义后调用,区别在什么地方,没区别,硬要讲的话,就是编译器在给s1复制的时候调用了类似s2复制的方式。

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

--在定义时直接调用函数和先定义后调用,区别在什么地方?
没区别,硬要讲的话,就是编译器在给s1复制的时候调用了类似s2复制的方式。

恩,这个层面我还是能理解的,就是不知道针对上面两张图的情况,定义时初始化和先定义后初始化为什么会造成不同的结果呢?

本回答被提问者和网友采纳

本回答由广州宏天软件股份有限公司提供

第一张应该是s2调用默认的构造函数 第二张是s2得到的是changeage()返回的值 没有调用构造函数

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

那要看你是要调用成员对象的哪个构造函数了,如果是有参数的就要显式调用,若是默认构造函数可以不写,默认会调用成员对象的默认构造函数

你对这个回答的评价是?

我要回帖

更多关于 c++初始化结构体 的文章

 

随机推荐