码迷,mamicode.com
首页 > 编程语言 > 详细

【C++系列经典例子】C++默认构造,拷贝,赋值,析构四函数

时间:2015-04-09 13:48:17      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:c++   构造函数   

本例子来自于学习视频,不是原创。

首先,我们已经知道我们创建类时会有四个默认函数(实际是有6个,具体以后再探究)

分别是:(以test类为例子)
class test
{
    private:
        int value;
}

1.构造函数:
test(int x=0)

2.拷贝构造函数:
test(const test& it)

3.赋值函数
test &operator(const test& it)

4.析构函数
~test()

以下是具体应用四个函数的过程的一个经典例子,能让我们更好的理解这四个函数的应用
代码如下:
#include<iostream>

using namespace std;

class Test
{
private:
 int value;
public:
 Test()
 {
  value = 0;
  cout << "defult create Test:" << this << endl;
 }
 Test(int t)
 {
  value = t;
  cout << "Create the Test:" << this << endl;
 }

 Test (const Test& it)
 {
  value = it.value;
  cout << "Copy create the test:" << this << endl;
 }

 Test & operator=(const Test& it)
 {
  value = it.value;
  cout << this << " = " << &it << endl;
  return *this;
 }
 ~Test()
 {
  cout << "Destory the Test:" << this << endl;
 }

 int get_value()
 {
  return value;
 }
};

Test fun(Test tp)
{
 int x = tp.get_value();
 Test tmp(x);
 return tmp;
}

int main()
{
 Test t1(10);
 Test t2;
 //Test t3();  //虽然没错,但是创建不了对象,因为规定是若要
    //调用默认的构造函数,则不需要括号,用括号会变成函数声明;
 t2 = fun(t1);
 
 cout << "main end!" << endl;
 
 return 0;
}

执行的结果分析:
关键点在于:
1.传递t1给形参时的过程
2.返回tmp实参的过程

技术分享


后续的补充:
fun()函数并不是最优的方法函数,在空间和时间上进行优化:
<pre name="code" class="cpp">/*1未优化前
Test fun(Test tp)//传值操作浪费时间和空间,所以换为引用
{
	int x = tp.get_value();
	Test tmp(x);
	return tmp;
}
*/

/*2对参数传递的优化
Test fun(const Test& tp)//传值操作浪费时间和空间,所以换为引用
						//且由于tp不能改变,我们可以加上const。这样可以明显减少时间空间上
{
	int x = tp.get_value();
	Test tmp(x);
	return tmp;
}
*/
//3对返回值的优化
Test fun(const Test & tp)
{
	int x = tp.get_value(); 
	//Test tmp(x);
	//return tmp;
	return Test(x);  //这里直接调用构造函数来进行构造一个无名对象进行传值,
					//这样系统就不会再创建一个临时变量来存储对象进行传值操作
}



【C++系列经典例子】C++默认构造,拷贝,赋值,析构四函数

标签:c++   构造函数   

原文地址:http://blog.csdn.net/u010518261/article/details/44958259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!