关于C++中的赋值与拷贝

简介:   很久没有用C++了,今天看到一道关于赋值与拷贝的面试题,准备写几句代码验证下。   首先,讲下验证过后的结论:   1)显示调用拷贝构造函数,肯定会执行拷贝构造函数。

  很久没有用C++了,今天看到一道关于赋值与拷贝的面试题,准备写几句代码验证下。

  首先,讲下验证过后的结论:

  1)显示调用拷贝构造函数,肯定会执行拷贝构造函数。如Cat c2(c1);

       2)在初使化时进行赋值,也会执行拷贝构造函数,如Cat c2=c1;

       3)其它时间进行赋值,执行operator=的实现函数。如Cat c1,c2; c1=c2;

代码如下所示:

 

#include <iostream>
using namespace  std;
class Cat{  
public:  
    char name[20];  
   
public: 
	Cat(){}
    Cat(char * s){  
		if(s!=NULL)
			 strcpy(name,s);
		cout<<"use constructor"<<endl;
    }  
      	
    Cat(const Cat & cat)
	{
		if(cat.name!=NULL)
			strcpy(name,cat.name);
		cout<<"use copy constrctor"<<endl;
	}
    Cat & operator=(Cat& cat)
	{
		if(this == &cat)  
		 return *this; 
		strcpy(name,cat.name);
		cout<<"use operator ="<<endl;
		return *this;
	}
	
   
};  

int main(){  
    Cat c1("there is a cat");  //use constructor
    Cat c2(c1); //use copy  constructor
    Cat c3 = c2; // use copy  constructor
    Cat c4,c5;  
    c5= c4 = c3; // use operator =  
    
    return 0;  
}  

下面粘贴下结果:


相关文章
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
77 0
|
1月前
|
C++
在C++语言中赋值运算符
在C++语言中赋值运算符
11 0
|
2月前
|
安全 C++
c++拷贝控制(二)
c++拷贝控制(二)
24 0
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
1月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
32 1
|
4月前
|
编译器 C++
【C++11特性篇】新的类功能解读:新增加的[移动构造函数/移动赋值运算符重载]
【C++11特性篇】新的类功能解读:新增加的[移动构造函数/移动赋值运算符重载]
|
9天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
23天前
|
NoSQL C++
c++中包含string成员的结构体拷贝导致的double free问题
c++中包含string成员的结构体拷贝导致的double free问题
8 0
|
1月前
|
C++
c++赋值运算符
c++赋值运算符
15 0
|
2月前
|
编译器 C++
【c++】构造函数赋值方式(初始化列表)
【c++】构造函数赋值方式(初始化列表)