当前位置:首页 > 开发 > 编程语言 > C/C++ > 正文

C++ 拷贝构造函数、赋值运算符=的调用时机

发表于: 2012-10-18   作者:cherishLC   来源:转载   浏览次数:
摘要: 至于这两种函数的用途,用于引用计数时比较有用吧,完成一些在堆上分配的数据的传递工作。 http://xinklabi.iteye.com/blog/653457 啥也不说了,直接上代码;注释很详细了 #include <iostream> using namespace std; class Class{ public: Class(){ }
至于这两种函数的用途,用于引用计数时比较有用吧,完成一些在堆上分配的数据的传递工作。 http://xinklabi.iteye.com/blog/653457


啥也不说了,直接上代码;注释很详细了

#include <iostream>
using namespace std;

class Class{

public:
	Class(){
	}
	//如果用 explicit Class(const Class& c){ 来声明,则不能用Class c1=c;而只可以Class c2(c);
	 Class(const Class& c){
		cout<<"copy construnctor called\n";
	}


	//=的调用者本身就是个Class类!该函数只是为了自行完成一些数据传递的任务,最后返回该调用者的引用即可
	Class& operator=(const Class& c){
		cout<<"= operator called\n";
		return *this;
	}

	//函数返回时调用拷贝构造函数
	static Class getClass(){
		cout<<"begin getClass\n";

		Class c;
		cout<<"end of getClass,soon to return\n";
		return c;

	}

};

//类作为参数,进入函数时会调用拷贝构造函数
void classAsParam(Class c){
	cout<<"begin classAsParam\n";
}

//类的引用作为参数,进入函数时不会调用拷贝构造函数
void classReferenceAsParam(Class& c){
	cout<<"begin classReferenceAsParam\n";
}


void main(){
	Class c;

	Class c1=c;//因为是初始化,调用的是拷贝构造函数,而非=运算符
	Class c2(c);//同上

	cout<<"\n////////////  Test getClass without return value\n";
	Class::getClass();//函数返回时调用拷贝构造函数

	cout<<"\n////////////  Test getClass with new left value\n";
	Class c3=Class::getClass();//函数返回时调用拷贝构造函数;由于c3在此声明,因而再调用拷贝构造函数(貌似被编译器省略了)

	cout<<"\n////////////  Test getClass with exist left value\n";
	c2=Class::getClass();//函数返回时调用拷贝构造函数;由于c2已经声明过,因而再调用=运算符将临时变量赋值给c2

	cout<<"\n////////////  Test classAsParam\n";
	classAsParam(c);//类作为参数,进入函数时会调用拷贝构造函数

	cout<<"\n////////////  Test classReferenceAsParam\n";
	classReferenceAsParam(c);//类的引用作为参数,进入函数时不会调用拷贝构造函数
}

C++ 拷贝构造函数、赋值运算符=的调用时机

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
#include<iostream> using namespace std; class Demo { private: int dwint; public: Demo(i
结论:new 一个数组时必须要有默认构造函数; delete数组时其中的所有元素的析构函数均会被调用。 #i
C++拷贝构造函数总结 目录: 拷贝构造函数的基础知识 拷贝构造函数的使用 拷贝构造函数的行为 1.拷
首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象
首先拷贝构造函数的声明方法: 类名::类名(const 类名&) 1、浅拷贝的实现程序: #include "stda
  今天想做道矩阵的题目时,却卡在一些编程细节上了,找了好久才发现原来是在构造函数处出了问题
什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100;
关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在【需要的时候】才去合成默认的
13.50 没有定义析构函数 #include<iostream> #include<string> #include<memory>
构造函数、析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号