复制控制---复制构造函数

复制构造函数

只有单个形参,并且该参数是对本类类型对象的引用。ios

主要用于:数组

1 根据另外一个同类型的对象显示或隐式的初始化一个对象函数

string a = "abc"; //调用复制构造函数将a初始化为abc
string aa = string(); //调用string()的构造函数,建立一个新的对象,再调用 复制构造函数初始化aa

string aa(5,"c"); //直接初始化

2 复制一个对象,将它做为实参传给一个函数spa

 

3 从函数返回时复制一个对象指针

AA function(AA& a){ ... return a; }

4 初始化顺序容器中的元素code

vector<string> arr(6); //调用int默认构造函数,而后调用复制构造函数给vector进行初始化

5 根据元素初始化数组元素对象

AA a[] = { 1,"aa", 3,"cc", 4,"dd", AA() }

 

自定义复制构造函数

class AA{ public: AA(); AA(const AA&); };

禁止复制

 显式的声明其复制构造函数为private.blog

 

课后习题

对以下类进行定义,编写一个复制构造函数复制全部成员。复制pstring指向的对象而不是复制指针。string

类定义:io

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"); }

输出以下:

相关文章
相关标签/搜索