c++中拷贝构造函数的用法?

c++中拷贝构造函数的用法?说的越详细越好!

拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-30
拷贝构造函数就是实现深拷贝用的
第2个回答  2012-05-29
通过一个程序理解拷贝构造函数
#include"iostream"
using namespace std;
class Student
{ private:
static int number;
public:
Student()
{number++;
show("Student");
}
Student(const Student&)
{ number++;
show("Student");
}
~Student()
{ number--;
show("~Student");
}
static void show(const char *str)
{ if(str)
cout<<str<<":";
cout<<"number="<<number<<endl;
}
};
int Student::number=0;
Student f(Student x)
{ x.show("x inside f()");
return x;
}
int main()
{ Student h1;
Student h2=f(h1);
Student::show("after call f()");
return 0;
}
运行结果
Student:number=1
Student:number=2
x inside f():number=2
Student:number=3
~Student:number=2
after call f():number=2
~Student:number=1
~Student:number=0
Press any key to continue
结果分析:开始定义一个对象 Student h1 调用构造函数使得 number++,使number=1,在调用函数f(h1)使得形参得到实参在函数体内又生成一个对象使得number=2,接着调用x.show()输出x inside f():number=2;当返回 一个对象调用拷贝构造函数初始化h2,使得 number=3,接着对返回对象进行析构,得到~Student:number=2,在运行Student::show("after call f()"),结束时析构两个对象 h1,h2,使得 number=1,0;注意:如果不定义拷贝构造函数系统会有默认的拷贝构造函数
第3个回答  2015-07-08
  拷贝构造函数:拷贝又称复制,因此拷贝构造函数又称复制构造函数,就是实现深拷贝用的。
  拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。
  其唯一的参数(对象的引用)是不可变的(const类型),此函数经常用在函数调用时用户定义类型的值传递及返回。
  拷贝构造函数的形式代码如下:
  Class X
{
public:
  X();
  X(const X&);//拷贝构造函数
}
相似回答