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

下面粘贴下结果:


相关文章
|
4月前
|
编译器 C++
C++程序中的对象赋值和复制
C++程序中的对象赋值和复制
36 1
|
3月前
|
编译器 C++
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
36 1
|
4月前
|
C++
C++程序中的赋值运算符
C++程序中的赋值运算符
40 2
|
3月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
|
3月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
3月前
|
存储 编译器 C++
【C++】:拷贝构造函数和赋值运算符重载
【C++】:拷贝构造函数和赋值运算符重载
22 1
|
4月前
|
编译器 C语言 C++
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值
23 1
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
|
2月前
|
机器学习/深度学习 算法 搜索推荐
|
2月前
|
编译器 C++
【C++】详解运算符重载,赋值运算符重载,++运算符重载
【C++】详解运算符重载,赋值运算符重载,++运算符重载
|
3月前
|
编译器 C++
【C++】类和对象③(类的默认成员函数:赋值运算符重载)
在C++中,运算符重载允许为用户定义的类型扩展运算符功能,但不能创建新运算符如`operator@`。重载的运算符必须至少有一个类类型参数,且不能改变内置类型运算符的含义。`.*::sizeof?`不可重载。赋值运算符`=`通常作为成员函数重载,确保封装性,如`Date`类的`operator==`。赋值运算符应返回引用并检查自我赋值。当未显式重载时,编译器提供默认实现,但这可能不足以处理资源管理。拷贝构造和赋值运算符在对象复制中有不同用途,需根据类需求定制实现。正确实现它们对避免数据错误和内存问题至关重要。接下来将探讨更多操作符重载和默认成员函数。