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,执行结果如下:



C++学习 operator两种用法详解

转换函数的名称是类型转换的目标类型,因此,不必再为它指定返回值类型;转换函数是被用于本类型的数值或变量转换为其他的类型,也不必带参数   在写这篇文章之前,让我们先回顾一下编译器通过匹配过程确...
  • skdkjxy
  • skdkjxy
  • 2015年05月20日 16:56
  • 6703

C++那些细节--中operator=相关问题

C++中关于operator=的相关知识整理,涉及深拷贝浅拷贝,以及一些拷贝构造函数的知识...
  • puppet_master
  • puppet_master
  • 2015年07月23日 14:09
  • 6018

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

一、 函数返回值 说到operator=的返回值,那么先必须要说一下函数的返回值。函数的返回值用于初始化在调用函数处创建的临时对象。 1、 返回引用类型             Test Fun(...
  • nodeathphoenix
  • nodeathphoenix
  • 2014年07月26日 17:13
  • 3084

让operator=返回*this的引用

  让operator=返回*this的引用 c++的设计者bjarne stroustrup下了很大的功夫想使用户自定义类型尽可能地和固定类型的工作方式相似。这就是为什么你可以重载运算符,写类型...
  • qwer_boo
  • qwer_boo
  • 2010年12月05日 19:07
  • 8295

Effective C++ 学习笔记:让operator=返回*this的引用

这节解决的是赋值操作符返回左值还是右值的问题! operator=接受一个对象的引用,同时应该返回一个对象的引用,c++程序员经常犯的一个错误是让operator=返回void,这虽然不是什么错误,但...
  • qinmelody
  • qinmelody
  • 2008年01月22日 21:51
  • 281

Effective C++ 学习笔记:让operator=返回*this的引用

这节解决的是赋值操作符返回左值还是右值的问题!operator=接受一个对象的引用,同时应该返回一个对象的引用,c++程序员经常犯的一个错误是让operator=返回void,这虽然不是什么错误,但是...
  • qinmelody
  • qinmelody
  • 2008年01月22日 21:53
  • 294

函数返回对象和返回对象的引用的区别

当返回对象时,C++编译器将调用类默认的拷贝构造函数,将对象赋值给一个匿名对象并将其扔出去 这个类似于拷贝构造函数的第四种方法,此时如果外面没有同一个类型的对象将其接住,就会直接析构掉。 ...
  • y780465649
  • y780465649
  • 2016年08月27日 17:05
  • 1842

C++笔记--返回对象还是返回引用

我们发现,在C++中,有些成员函数返回的是对象,而有些函数返回的又是引用。 返回对象和返回引用的最主要的区别就是函数原型和函数头。 Car run(const Car &)     //返回对象 Ca...
  • gotowu
  • gotowu
  • 2016年01月13日 17:14
  • 2310

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

class CTest { public: CTest() { printf("Constructor function is executed now!\n"); } CTest(in...
  • liuzhi1218
  • liuzhi1218
  • 2012年03月30日 13:45
  • 528

条款10:令operator = 重载运算符返回一个 *this 引用

赋值采用右结合律: x=y=z=15;    等价于   x=(y=(z=15)); 赋值操作符必须返回一个引用指向操纵符的实参。...
  • baidu_24192931
  • baidu_24192931
  • 2016年08月25日 14:07
  • 51
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:operator=返回对象和引用的区别
举报原因:
原因补充:

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