C++构造函数的问题?

AI吃大瓜
人工智能领域优质创作者
博客专家认证
2016-11-16 09:12:17
本人刚入门学C++;有个问题,见下面代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Person{
public:
int age;
public:
Person(){
age=10 ;
};
};

int main(void)
{
Person per1;
Person per2(per1);//复制呢?相当于per2=per1麽?
cout<<per2.age<<endl;
return 0;
}

我的问题:我没有定义带参数的构造函数,为什么还可以Person per2(per1);并且per1复制给了per2;相当于per2=per1麽?这是什么语法?我知道我C++学的不好,求指教~
...全文
271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
drivermonitor 2016-11-19
  • 打赏
  • 举报
回复
类中会有无参构造函数还有拷贝构造函数,拷贝构造函数是每个类都会有的,拷贝构造函数的原型一般如下:
ClassName(const ClassName &object);
这相当于使用赋值运算符:
ClassName& operator=(ClassName &object);
编译器默认实现的是浅拷贝,自己可以定义深拷贝(尤其在涉及指针数据域时)
Ouyang_Lianjun 2016-11-17
  • 打赏
  • 举报
回复
如果就按照表层的来说,Person per2(per1)就是一个初始化类对象的一种方式,它是调用拷贝构造函数完成对象的初始化的,它等价于Person per2=per1
小灸舞 2016-11-17
  • 打赏
  • 举报
回复
以下情况都会调用拷贝构造函数:
1.一个对象以值传递的方式传入函数体
2.一个对象以值传递的方式从函数返回
3.一个对象需要通过另外一个对象进行初始化。
http://blog.csdn.net/lwbeyond/article/details/6202256
AlbertS 2016-11-17
  • 打赏
  • 举报
回复
 Person per2(per1);
这一句调用默认的拷贝构造函数,如果不自己定义,编译器会自动生成一个,就是对新生成的对象起到一个初始化的作用,你说是复制也是可以的
陪妳看星星 2016-11-17
  • 打赏
  • 举报
回复
编译器默认提供不带参数的构造函数、拷贝构造函数、析构函数。
ri_aje 2016-11-17
  • 打赏
  • 举报
回复
编译器自动生成了一个复制构造函数。
paschen 版主 2016-11-16
  • 打赏
  • 举报
回复
Person per2(per1); 这里使用的复制构造函数,如果没有提供复制构造函数,编译器也会自动生成一个默认的复制构造函数
maoxuechun 2016-11-16
  • 打赏
  • 举报
回复
类里面默认的有拷贝构造函数,Person per2(per1);这句调用的就是默认拷贝构造函数

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧