`

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

    博客分类:
  • C++
 
阅读更多
至于这两种函数的用途,用于引用计数时比较有用吧,完成一些在堆上分配的数据的传递工作。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);//类的引用作为参数,进入函数时不会调用拷贝构造函数
}
分享到:
评论

相关推荐

    关于拷贝构造函数和赋值运算符

    拷贝构造函数和赋值运算符的调用时机也是我们需要注意的。拷贝构造函数会在创建新对象时被调用,例如: ```cpp CExample obj1; // 普通构造 CExample obj2 = obj1; // 拷贝构造 CExample obj3(obj1); // 同样是拷贝...

    拷贝构造函数和赋值运算符的区别.docx

    1. **调用时机**:拷贝构造函数在对象创建时调用,赋值运算符在对象创建后、生命期内的某个时刻调用。 2. **作用对象**:拷贝构造函数创建新对象,赋值运算符修改已有对象。 3. **资源管理**:两者都涉及资源的复制...

    拷贝构造函数和赋值运算符的区别 (2).docx

    1. 调用时机:拷贝构造函数在对象创建时调用,而赋值运算符在对象已经存在后调用。 2. 对象状态:拷贝构造函数创建的是全新对象,原始对象不受影响;赋值运算符影响的是已有对象,可能导致原始对象状态改变。 3. ...

    拷贝构造函数和赋值运算符的区别 (2).pdf

    1. 调用时机:拷贝构造函数在对象创建时调用,赋值运算符在对象已经存在后调用。 2. 参数类型:拷贝构造函数接收一个常量引用,赋值运算符通常接收一个非常量引用。 3. 对象状态:拷贝构造函数创建全新的对象,赋值...

    拷贝构造函数和赋值运算符的区别.pdf

    1. 调用时机:拷贝构造函数在创建新对象时调用,赋值运算符在已有对象之间进行赋值操作时调用。 2. 参数类型:拷贝构造函数的参数是常量引用,赋值运算符通常接受一个同类型对象作为参数。 3. 对象状态:拷贝构造...

    C++拷贝构造函数和赋值操作

    ### C++拷贝构造函数与赋值操作详解 在C++编程中,拷贝构造函数与赋值操作是实现类的拷贝管理的关键机制。它们主要用于处理类的对象之间的拷贝和复制过程,尤其是在处理含有动态分配内存的类时尤为重要。 #### ...

    不要轻视拷贝构造函数与赋值函数

    - 调用时机:当创建新对象时,如果该对象的初始化需要一个同类型对象作为参数,则会调用拷贝构造函数。 - 示例:`String c(a);` 2. **赋值函数(赋值运算符重载)**: - 定义:赋值函数允许现有对象接收另一个...

    c++构造函数小测验

    本次小测验的主题是C++构造函数的相关知识点,包括构造函数的种类、调用时机以及构造函数的实现方式等。 首先,我们看到给定的代码片段中出现了Student类和Sprite类的定义,这两个类都是C++中类的典型示例。Student...

    电子科技《C++语言程序设计》在线作业3辅导答案.docx

    选项A、B、C都会触发拷贝构造函数,而选项D是对象赋值操作,会调用赋值运算符而不是拷贝构造函数。 5. 常对象指针:`const A * p;`声明了一个指向类A对象的指针,但指针所指的对象是常量,即不能通过p修改对象的...

    C++面试题,公司面试必备

    8. **拷贝构造函数的调用时机**:拷贝构造函数在创建新对象并使用现有对象初始化时、函数参数传递和函数返回值时被调用。 9. **构造函数的特点**:构造函数与类名相同,无返回类型,主要用于初始化对象成员。 10. ...

    C++笔试题题目

    8. **拷贝构造函数的调用时机**:拷贝构造函数在对象初始化、函数参数传递和函数返回值时会被调用。 9. **构造函数的特点**:构造函数用于初始化新创建的对象,其名称与类名相同,不返回任何值。构造函数的主要任务...

    C++ Interview Questions

    #### 复制构造函数的调用时机 **问题**: 复制构造函数在哪些情况下会被调用? **解答**: 复制构造函数在以下几种情况下会被调用: 1. 当函数返回对象的值时。 2. 当对象作为值传递给函数参数时。 3. 当基于现有对象...

    c++面试题大全300题

    赋值运算符和拷贝构造函数虽然都是用来复制对象,但它们之间的不同在于,拷贝构造函数用于创建一个新的对象,而赋值运算符则是将一个对象的值赋给另一个已经存在的对象。析构函数则是在对象生命周期结束时被调用,...

    C/C++经典面试题

    21. 赋值运算符与拷贝构造函数:两者都涉及对象复制,但拷贝构造函数用于创建新对象,而赋值运算符作用于已存在的对象。 22. 析构函数调用:对象生命周期结束时,如局部对象离开作用域或动态分配的对象被删除时。 ...

    c++开发工程师常用面试题.doc

    8. **拷贝构造函数的调用时机**:对象初始化、函数参数传递和函数返回值等场景会触发拷贝构造函数。 9. **构造函数**:构造函数与普通函数的主要区别在于其名称与类名相同,无返回类型,主要用于初始化对象。 10. ...

    C++复试宝典.pdf

    三、复制构造函数及其调用时机 复制构造函数是一种特殊的构造函数,用于创建一个新的对象,并用一个已存在的同类型对象初始化它。其形参通常是对本类对象的引用。复制构造函数在以下情况下会被调用:一是用一个对象...

    300道C++题目

    - 区别:拷贝构造函数涉及创建新对象的过程,而赋值运算符则是在已存在的对象之间进行赋值。 **22. 析构函数的调用时机** 析构函数会在对象的生命周期结束时被自动调用,例如当对象离开作用域或者显式删除动态分配...

    C++知识点学习

    赋值运算符和拷贝构造函数虽然都是用于对象之间的复制,但它们之间存在明显的区别: - **赋值运算符**用于已存在的对象之间进行赋值操作。 - **拷贝构造函数**用于创建新对象时,以现有对象作为参数。 #### 二十二...

    c++必会面试300题

    8. **拷贝构造函数的调用时机**:拷贝构造函数在创建新对象并使用已有对象初始化时、函数参数传递和函数返回值时被调用。 9. **构造函数**:构造函数用于初始化对象,名称与类名相同,没有返回类型。构造函数的主要...

    c++ 笔试题

    21. **赋值运算符和拷贝构造函数**:两者都可以实现对象间的数据复制,但拷贝构造函数用于新对象的创建,赋值运算符作用于已存在的对象。 22. **析构函数的调用**:对象生命周期结束,例如离开其作用域或删除动态...

Global site tag (gtag.js) - Google Analytics