复制控制---复制构造函数
时间:2022-04-22
本文章向大家介绍复制控制---复制构造函数,主要内容包括复制构造函数、自定义复制构造函数、禁止复制、课后习题、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
复制构造函数
只有单个形参,而且该参数是对本类类型对象的引用。
主要用于:
1 根据另一个同类型的对象显示或隐式的初始化一个对象
string a = "abc"; //调用复制构造函数将a初始化为abc
string aa = string(); //调用string()的构造函数,创建一个新的对象,再调用 复制构造函数初始化aa
string aa(5,"c"); //直接初始化
2 复制一个对象,将它作为实参传给一个函数
3 从函数返回时复制一个对象
AA function(AA& a){
...
return a;
}
4 初始化顺序容器中的元素
vector<string> arr(6); //调用int默认构造函数,然后调用复制构造函数给vector进行初始化
5 根据元素初始化数组元素
AA a[] = {
1,"aa",
3,"cc",
4,"dd",
AA()
}
自定义复制构造函数
class AA{
public:
AA();
AA(const AA&);
};
禁止复制
显式的声明其复制构造函数为private.
课后习题
对如下类进行定义,编写一个复制构造函数复制所有成员。复制pstring指向的对象而不是复制指针。
类定义:
struct NOName{
NoName():pstring(new std::string),i(0),d(0){}
private:
std::string *pstring;
int i;
double d;
};
#include "stdafx.h"
#include <iostream>
using namespace std;
struct NoName{
NoName():pstring(new std::string),i(0),d(0){}
NoName(const NoName&);
public:
std::string *pstring;
int i;
double d;
};
NoName::NoName(const NoName& other){
pstring = new std::string;
*pstring = *(other.pstring);
i = other.i;
d = other.d;
}
int main(){
NoName a;
string *p;
string abc="hello";
p = &abc;
a.pstring = p;
a.i = 2;
a.d = 3;
NoName b = a;
cout<<a.pstring<<endl;
cout<<b.pstring<<" "<<b.i<<" "<<b.d<<endl;
system("pause");
}
输出如下:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JQuery 入门学习(三)
- Android实现美团APP的底部滑动菜单
- 正则十八式-第二式:控鹤擒龙
- android实现手写签名功能
- [普及]程序自启动方式 - ActiveX
- Android WebView实现顶部进度条
- 通过一个简单的例子学习Angular Injection Token工作原理
- Android 自定义球型水波纹带圆弧进度效果(实例代码)
- Android自定义View实现弹幕效果
- 使用Injection Token将字符串类型的参数注入到类的构造函数里
- 联想Y480 ubuntu安装有线驱动
- 通过运行时单步调试弄清楚[(ngModel)]的双向绑定的工作原理
- Shadow Root DOM的一些API
- 【Flutter高级玩法- Flow 】我的位置我做主
- PCMAN FTP STOR命令栈溢出