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

下面粘贴下结果:


相关文章
|
编译器 C++
C++程序中的对象赋值和复制
C++程序中的对象赋值和复制
238 1
|
1月前
|
监控 Linux 测试技术
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
🌟 蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕C++与零拷贝网络编程,从sendfile到DPDK,实战优化服务器性能,毫秒级响应、CPU降60%。分享架构思维,共探代码星辰大海!
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
244 2
|
8月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
414 6
|
编译器 C++
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
135 1
|
编译器 C语言 C++
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值
128 1
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(中)
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
199 1
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
264 1
|
存储 编译器 C++
【C++】:拷贝构造函数和赋值运算符重载
【C++】:拷贝构造函数和赋值运算符重载
186 1
|
存储 安全 C语言
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(上)
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值
105 2