C++复制构造函数的实现

复制构造函数是一种特殊的构造函数,有一般构造函数的特性。它的功能是用一个已知的对象来初始化一个被创建的同类对象。复制构造函数的参数传递方式必须按引用来进行传递,请看实例:

#include <iostream>
#include <cstring>
using namespace std ;
class Student
{
	private :
		char name[8];
		int age ;
		char sex ;
		int score ;
	public :
		void disp(); //打印信息的函数声明
		Student(char name[],int age , char sex ,int score); //构造函数声明
		Student(Student &dx);	//复制构造函数的声明
		~Student(); //析构函数的声明
};
//打印信息函数的实现
void Student::disp()
{
	cout << this->name << endl ;
	cout << this->age << endl ;
	cout << this->sex << endl ;
	cout << this->score << endl ;
}
//构造函数的实现
Student::Student(char name[],int age , char sex ,int score)
{
	strcpy(this->name,name);
	this->age = age ;
	this->sex = sex ;
	this->score = score ;
}
//复制构造函数的实现
Student::Student(Student &dx)
{
	strcpy(this->name , dx.name);
	this->age = dx.age ;
	this->sex = dx.sex ;
	this->score = dx.score ;
}
//析构函数的实现
Student::~Student()
{
	cout << "程序结束" << endl ;
} 

int main(void)
{
	Student stu1("YYX",23,'N',86);
	Student stu2(stu1);
	stu1.disp() ;
	stu2.disp() ;
	return 0 ;
}

运行结果:
YYX

23

N

86

YYX

23

N

86

程序结束

程序结束

时间: 2024-12-06 18:20:55

C++复制构造函数的实现的相关文章

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc

编程技巧OOPs:复制构造函数

OOPs 1. 什么是复制构造函数 我们知道构造函数是用来初始化我们要创建实例的特殊的方法.通常我们要将一个实例赋值给另外一个变量c#只是将引用赋值给了新的变量实质上是对同一个变量的引用,那么我们怎样才可以赋值的同时创建一个全新的变量而不只是对实例引用的赋值呢?我们可以使用复制构造函数. 我们可以为类创造一个只用一个类型为该类型的参数的构造函数,如: public Student(Student student) { this.name = student.name; } 使用上面的构造函数我们

C++:默认复制构造函数 执行 浅拷贝

C++, 会默认生成一个复制构造函数, 当类中出现指针时, 复制会执行浅拷贝, 即只复制指针的地址, 不会复制数据; 所以在类中, 使用指针时, 需要注意; 如果想使用深拷贝, 可以添加复制构造函数. 以下代码, 如果不添加复制构造函数, 则会运行出错, 但可以通过编译, 运行时, 因为删除(delete[])两次str所指的同一片地址空间, 所以程序无法执行. 代码: /* * main.cpp * * Created on: 2014.4.15 * Author: Spike */ /*vs

复制构造函数

问题描述 复制构造函数 看代码: Test.h: class A{public: A(){}; ~A(){}; A(const A& a) { data = a.data; } int data; A& operator + (const A& a);}; A& A::operator + (const A& a){ A temp; temp.data = data + a.data; return temp;} Main.cpp: #include using n

c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧?

问题描述 c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 如题:c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 解决方案 什么?复制构造函数? 解决方案二: C++类构造函数列表初始化C++类构造函数初始化列表c++中什么类型的成员变量只能在构造函数的初始化列表中进行 解决方案三: 真是初始化列表,跟复制构造函数没关系,调用复制构造函数要看你是如何初始化的 解决方案四: 参数列表初始化成员是调用成员的构造函数,但是什

c++-关于复制构造函数跟赋值运算符重载

问题描述 关于复制构造函数跟赋值运算符重载 新手求指导 关于两个函数不太理解 复制构造的是同一个内存地址吗 为什么要重载赋值运算符 解决方案 赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A.不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的:复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在. CTemp a(b); //复制构造函数,C++风格的初始化 CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样 在这

c++-复制构造函数的形参,常引用

问题描述 复制构造函数的形参,常引用 C++中,复制构造函数为什么要用"常引用"作形参,而不是"引用"?谢谢啦 解决方案 复制构造函数中不能修改的内容,是p的成员变量,即p.pointer的值.也就是说,你不能使p.pointer指向别的位置.即下面这段代码会报错: Pstu(const Pstu& p) { pointer = p.pointer; p.pointer = NULL; //这句代码会报错 cout << "此时coun

何时需要自定义复制构造函数?

本文涉及对象的赋值和复制(也称为克隆).必要时,先看谭浩强教材P291-295的相关内容或PPT,重温一下有关概念. 一.一般情况 先看一个例子: //例程1 #include <iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} friend Complex operator+(const Comp

C++返回值为对象时复制构造函数不执行怎么破

先说点背景知识,调用复制构造函数的三种情况: 1.当用类一个对象去初始化另一个对象时. 2.如果函数形参是类对象. 3.如果函数返回值是类对象,函数执行完成返回调用时. 在辅导学生上机时,有同学第3点提出异议.有教材上的例题为证: #include <iostream> using namespace std; class Point //Point 类的定义 { public: Point(int xx=0, int yy=0) { x = xx; //构造函数,内联 y = yy; } P