三、C++ 复制构造函数

来源:互联网 发布:windows下svn钩子 编辑:程序博客网 时间:2024/05/22 13:23

C++ 复制构造函数

一、基本概念

只有一个参数,且为对同类对象的引用。

格式:X::X( X& )或X::X(const X &),后者能以常量对象作为参数。

如果没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能。

例子:

class Complex {public :    Complex(){ }    Complex( const Complex & c ) {        cout << “Copy Constructor called”;    }};Complex c1;Complex c2(c1);//调用自己定义的复制构造函数

输出

Copy Constructor called

二、复制构造函数的三个使用场合

2.1 一个对象去初始化同类的另一个对象时

以下两种情况,复制构造函数都会被调用

Complex c2(c1); Complex c2 = c1; //初始化语句,非赋值语句

2.2 作为函数的形参

class A {     public:        A() { }        A( A & a) {            cout << "Copy constructor called" <<endl;        }};void Func(A a1){ }int main(){    A a2;    Func(a2);    return 0;}

程序输出结果为

Copy constructor called

当类的对象作为某个方法的形参,且这个方法被调用时,该类的复制构造函数将被调用,并用于初始化这个方法中的形参。

在这个例子里面,a1是复制构造函数初始化的,初始化的时候,它所调用的复制构造函数的参数是a2。a1不一定等于a2,因为a1的值是复制构造函数初始化的,而这个复制构造函数并没有做复制的工作。

2.3 作为函数的返回值

class A{    public:    int v;    A(int n) { v = n; };    A( const A & a) {        v = a.v;        cout << "Copy constructor called" <<endl;    }};A Func() {    A b(4);    return b; //这条语句执行完之后调用复制构造函数}int main() {    cout << Func().v << endl;    return 0;}

输出结果:

Copy constructor called
4

三、小结

复制构造函数:

A( A & a) { }//或:A(const A & a) { }
  1. 复制构造函数无返回值,只有一个参数,且为同类对象的引用,作用是复制一个类的对象给该类的另一个对象

  2. 复制构造函数被调用的情况有三种,分别是用一个对象去初始化另一个对象的时候、一个对象作为某个函数的形参且这个函数被调用的时候、一个对象作为某个函数的返回值且这个函数被调用的时候

0 0
原创粉丝点击