operator=返回对象和引用的区别

原创 2012年03月30日 13:45:25
class CTest
{
public:
	CTest()
	{
		printf("Constructor function is executed now!\n");
	}

	CTest(int nID)
	{ 
		printf("Constructor function with parameter is executed now!\n");
		m_nID = nID;
	}

	~CTest()
	{
		printf("Destructor function is executed now!\n");
	}

	CTest(const CTest& test)
	{
		printf("Copy constructor function is executed now!\n");
		m_nID = test.m_nID;
	}

	/// <summary>
	/// 	1,如果是返回对象,则先调用operator=,然后调用拷贝构造函数;
	///		2,如果返回引用,则只是调用operator=,效率更高
	/// </summary>
	CTest& operator=(const CTest& test)
	{
		printf("Assignment constructor function is executed now!\n");
		m_nID = test.m_nID;
		return *this;
	}

	void printID()
	{
		printf("m_ID = %d\n", m_nID);
	}

private:
	int m_nID;
};

int _tmain(int argc, _TCHAR* argv[])
{
	//case1
	//{
	//	CTest test1(1);
	//	CTest test2, test3;
	//	test3 = test2 = test1;
	//}

	//case2
	{
		CTest test1(2);
		CTest *pTest2 = new CTest(test1);	//只调用拷贝构造函数
		delete pTest2;
	}

	getchar();
	return 0;
}


对于case1,执行结果如下:


对于case2,执行结果如下:



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

operator=为什么要返回一个reference to *this

一、 函数返回值 说到operator=的返回值,那么先必须要说一下函数的返回值。函数的返回值用于初始化在调用函数处创建的临时对象。 1、 返回引用类型             Test Fun(...

Effective c++学习笔记——条款10:令operator=返回一个*this的引用

Have assignment operators return a reference to *this 从题目,我们就要记住这条信息,让你的operator=函数return *this; 基...

条款15:让operator=返回*this的引用

c++的设计者bjarne stroustrup下了很大的功夫想使用户自定义类型尽可能地和固定类型的工作方式相似。这就是为什么你可以重载运算符,写类型转换函数(见条款m5),控制赋值和拷贝构造函数,等...

对象和引用的区别

  • 2013-08-07 11:33
  • 965B
  • 下载

赋值运算符重载函数 返回引用和返回对象的区别

赋值重载符的定义 返回引用和返回对象的区别#include "stdafx.h" #include using namespace std;class CStudent { public: C...

C++函数对象operator()

函数对象:定义了调用操作符()的类对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子: class A { public: int ...
  • xgf415
  • xgf415
  • 2016-10-29 21:59
  • 1288

c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别

operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。它可以定义不同类型之间采用何种转化方式和转化的结果。 operator用于定义类型转化时可采用2种方式,隐式转换(imp...

实战c++中的vector系列--构造、operator=和assign区别

vector也许是实际过程中使用最多的stl容器,看似简单,其实有很多技巧和陷阱。着重看一看vector的构造,暂时按照C++11:default (1) explicit vector (cons...

c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别

msdn参考:http://msdn.microsoft.com/zh-cn/library/s53ehcz3.aspx               http://msdn.microsoft....

c++构造函数总结----C++拷贝构造函数及重写operator =的区别

c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)