关于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;  
}  

下面粘贴下结果:


相关文章
|
7月前
|
编译器 C++
C++程序中的对象赋值和复制
C++程序中的对象赋值和复制
87 1
|
2月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
52 2
|
6月前
|
编译器 C++
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
53 1
|
7月前
|
C++
C++程序中的赋值运算符
C++程序中的赋值运算符
80 2
|
7月前
|
编译器 C语言 C++
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值
39 1
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
|
6月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
|
6月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
6月前
|
存储 编译器 C++
【C++】:拷贝构造函数和赋值运算符重载
【C++】:拷贝构造函数和赋值运算符重载
31 1
|
5月前
|
机器学习/深度学习 算法 搜索推荐
|
5月前
|
编译器 C++
【C++】详解运算符重载,赋值运算符重载,++运算符重载
【C++】详解运算符重载,赋值运算符重载,++运算符重载