c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如:

A(void);//缺省的无参数构造函数

A(const A&a);//缺省的拷贝构造函数

~A();//缺省的析构函数

A&operator=(const A &a);//缺省的赋值构造函数

<1>“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。

<2>当类还没有生成的时候,调用大是拷贝构造函数,当类已经生成的时候,调用的是赋值构造函数,如下所示:

A a;

A b;

b = a;//此时类a和b都已经生成了,所以调用的是赋值构造函数

A c;

A d=c;//此时类d还没有生成,所以调用的是拷贝构造函数

<3>所有的函数调用传参数,调用的都是拷贝构造函数。如果函数参数用的是引用类型,则不会发生参数的拷贝,也就不会调用任何函数了。

如下:

void print_a(const A a);//调用拷贝构造函数

void print_b(const A &a);//为引用,不会调用任何函数

<4>拷贝构造函数和赋值构造函数对实现。

A::A(const A&a){

}

拷贝构造函数没有返回,为一个全新的类

A &A::operator=(const A&a){

return *this;

}

赋值构造函数返回自身,即*this,为在原先的类上大操作。

<5>这里面涉及到c++到浅拷贝和深拷贝到问题。涉及指针的问题时,特别得注意深拷贝的问题。

 

 

 

posted @ 2016-08-25 23:09  叫我二当家  阅读(413)  评论(0)    收藏  举报