拷贝构造函数
来源:互联网 发布:淘宝延长收货如何设置 编辑:程序博客网 时间:2024/06/16 14:24
-----------------siwuxie095
以 Student 类为例:
先定义了 Student 类,在使用时,先实例化 stu1 对象,接着又实例化 stu2
对象,并将stu1 赋值给 stu2,这样就使得 stu2 在实例化的过程中拥有 stu1
的值,接着又实例化 stu3 对象,也将 stu1 赋值过来,使得 stu3 拥有了 stu1
里面的值
但是运行代码时却发现,只打印了一行Student,而没有像想象的那样打印
三行,毕竟是实例化了三个对象,理论上应该调用三次构造函数
实际上,后两种实例化对象的方式的确是调用了构造函数,但调用的不是这里
定义的构造函数,而是一个特殊的构造函数,即拷贝构造函数
拷贝构造函数
拷贝构造函数在定义时,与普通的构造函数基本相同,只是在参数上
有严格的要求
如下:
如果将相应的代码写在拷贝构造函数的实现的部分,再采用直接初始化
或复制初始化来实例化对象时,就执行拷贝构造函数中相应的代码,而
在实例化stu2 和 stu3 时并没有定义拷贝构造函数,仍能把它们实例化
出来,可见:拷贝构造函数与普通的构造函数一样,系统可自动生成
构造函数总结:
(1)构造函数的分类
(2)如果自定义了普通构造函数和拷贝构造函数,则系统不会
自动生成这两个函数
(3)初始化列表无论放在普通构造函数的后边还是拷贝构造函数
的后边,都有着不可取代的地位
程序:
Teacher.h:
#include <string>
using namespace std;
class Teacher
{
public:
Teacher(string name ="Jim", int age = 1);//有参默认构造函数
Teacher(const Teacher &t);//拷贝构造函数
void setName(string name);
string getName();
void setAge(int age);
int getAge();
private:
string m_strName;
int m_iAge;
};
Teacher.cpp:
#include"Teacher.h"
#include <iostream>
using namespace std;
Teacher::Teacher(string name,int age) :m_strName(name), m_iAge(age)
{
cout <<"Teacher(string name, int age)" << endl;
}
Teacher::Teacher(const Teacher &t)
{
cout <<"Teacher(const Teacher &t)" << endl;
}
void Teacher::setName(string name)
{
m_strName = name;
}
string Teacher::getName()
{
return m_strName;
}
void Teacher::setAge(int age)
{
m_iAge = age;
}
int Teacher::getAge()
{
return m_iAge;
}
main.cpp:
#include<stdlib.h>
#include"Teacher.h"
#include <iostream>
using namespace std;
//拷贝构造函数在参数传递时也会被自动调用
void test(Teacher t)
{
}
int main(void)
{
Teacher t1;
Teacher t2 = t1;//复制初始化
Teacher t3(t1);//直接初始化
test(t1);
system("pause");
return0;
}
【made by siwuxie095】
- 构造函数、拷贝构造函数
- 拷贝构造函数,构造函数
- 拷贝构造函数--默认拷贝构造函数
- 构造、拷贝构造函数基础
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数----深拷贝、浅拷贝
- 拷贝构造函数
- 拷贝构造函数
- 浅析拷贝构造函数
- 拷贝构造函数
- 拷贝构造函数
- C++拷贝构造函数
- C++拷贝构造函数
- 拷贝构造函数
- 一致性 hash 算法( consistent hashing )
- MFC学习中遇到的问题集合
- Java并发(七)线程的对象锁
- Hadoop渐进五:Hadoop I/O(Sequence, Map, Set...)
- 目标检测之YOLO
- 拷贝构造函数
- mybatis的SqlMapConfig.xml文件的详细配置
- 获取指定应用的名称、版本等信息
- word转html
- 数据类型_类型,变量,成员;以及typedef
- python2.7用pip进行安装时报错Fatal error in launcher: Unable to create process using '"'
- s3c2440烧写整个系统(及利用Jlink下载u-boot)
- 文章标题
- springmvc详解及demo的搭建