程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++拾遺--構造函數(二)

C++拾遺--構造函數(二)

編輯:C++入門知識

C++拾遺--構造函數(二)


C++拾遺--構造函數(二)

前言

在構造函數(一)中討論的是默認構造函數的一些應用。這裡我們來探討下其它的一些有名構造函數,及其它們的應用場景。

實例

 

#include 
using namespace std;

class Complex
{
protected:
	int real = 0;
	int imag = 0;
public:
	//默認構造
	Complex()
	{
		cout << Complex() << endl;
	}
	Complex(int r, int i) :real(r), imag(i)
	{
		cout << Complex(int r, int i) << endl;
	}
	//指定其它的構造函數完成自己的工作,相當於委托
	Complex(int r) :Complex(r, 0)
	{
		cout << Complex(int r) << endl;
	}
	Complex(Complex& com)     //拷貝構造的參數必須是引用類型
	{
		cout << Complex(Complex& com) << endl;
		real = com.real;
		imag = com.imag;
	}
	Complex& operator=(Complex& com)     //這裡的參數可以是非引用的
	{
		cout << Complex& operator=(Complex& com) << endl;
		real = com.real;
		imag = com.imag;
		return *this;
	}
};
int main()
{
	Complex com1;            //默認初始化,調用Complex()默認構造
	cout << --- << endl;
	Complex com2(com1);      //直接初始化,調用Complex(Complex& com)
	cout << --- << endl;
	Complex com3 = com1;     //賦值初始化,調用Complex(Complex& com)
	cout << --- << endl;
	Complex com4;            //默認初始化,調用Complex()默認構造
	cout << --- << endl;
	com4 = com1;             //賦值,調用operator=(Complex& com)
	cout << --- << endl;
	Complex com5(1, 1);      //調用指定的構造函數Complex(int r, int i)
	cout << --- << endl;
	Complex com6(1);
	cin.get();
	return 0;
}
運行

 

\
 

有名構造函數

1.拷貝構造

類似於Complex(Complex& com);其中的參數必須是引用類型,這就是拷貝構造函數。

所謂的淺拷貝和深拷貝,針對的是指針成員,對於普通成員,則無區別。對於指針成員而言,僅僅復制一份地址,則是淺拷貝,若復制的是內容,則是深拷貝。

若復制的僅僅是一份地址,則多個對象會共用同一份資源,當其中一個對象被銷毀,資源隨之銷毀。其它對象則受影響。這就是所謂的淺拷貝和深拷貝的問題。

2.委托構造

在新標准中把類似於 Complex(int r):Complex(r, 0){}的構造稱為委托構造。

類比於設計模式:委托,可以很好理解。Complex(int r)把實際工作交給了Complex(r, 0)。

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved