程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++中六種構造函數的實現以及9中情況下,構造函數的調用過程

c++中六種構造函數的實現以及9中情況下,構造函數的調用過程

編輯:關於C++

六種構造函數的實現代碼如下:

 

#include
using namespace std;
//c++中六種默認的構造函數
class Test
{
public:
	Test(int d = 0):m_data(d)//1構造函數(帶默認值0),以參數列表的形式初始化
	{
		cout<<"Creat Test Obj :"<

 

情況一:

 

//1
Test fun(Test t)
{
	int value = t.GetData();
	Test tmp(value);
	return tmp;
}

int main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
	return 0;
}
\
情況二:

 

 

//2
Test fun(Test t)
{
	int value = t.GetData();
	return Test(value);
}

int main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
	return 0;
}
\
情況三:

 

 

//3
Test fun(Test &t)
{
	int value = t.GetData();
    Test tmp(value);
	return tmp;
}

int main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
	return 0;
}
\
情況四:

 

 

//4
Test fun(Test &t)
{
	int value = t.GetData();
	return Test(value);
}

void main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
}
\

 

情況五:

 

//5
Test& fun(Test &t)
{
	int value = t.GetData();
	Test tmp(value);
	return tmp;
}

void main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
}
\

 

情況六:

 

//6
Test& fun(Test &t)
{
	int value = t.GetData();
	return Test(value);
}

void main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
}
\

情況七:

 

 

//7
Test fun(Test &t)
{
	int value = t.GetData();
	return Test(value);
}

void main()
{
	Test t(10);
	Test t1 = fun(t);
}
\
情況八:

 

 

//8
Test fun(Test &t)
{
	int value = t.GetData();
	Test tmp(value);
	return tmp;
}

void main()
{
	Test t(10);
	Test t1 = fun(t);
}
\
情況九:

 

 

Test& fun(Test &t)
{
	int value = t.GetData();
	Test tmp(value);
	return tmp;
}

void main()
{
	Test t(10);
	Test t1;
	t1 = fun(t);
}

\

 

綜上所述:

一:調用拷貝構造函數的情況:

1)直接用對象初始化對象

2)形參數對象時,用實參對象初始化

3)函數的返回值類型是類時(非引用)是,拷貝構造無名的臨時空間作為函數返回值

二:注意:

當函數的返回值是該函數中的一個臨時對象時,函數類型不可以定義為Test &即引用,否則會發生,用一個已經析構的臨時對象初始化另外一個對象,會發生錯誤;

三:提高效率的方式:

1)形參用引用,不再調用拷貝構造函數

2)返回一個無名的臨時對象a,系統不再創建另外的一個臨時對象而直接將a作為返回值,(函數返回類型不是引用)

3)返回無名的臨時對象,且用它初始化另外一個對象,如情況七,直接將無名的對象作為另外的一個對象

4)上述三種情況結合;

 

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