複製控制---複製構造函數

複製構造函數

只有單個形參,並且該參數是對本類類型對象的引用。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"); }

輸出以下:

相關文章
相關標籤/搜索