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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,为在原先的类上大操作。

以上是关于c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++类和对象—— 类的6个默认成员函数及日期类的实现

[ C++ ] C++类与对象之 类中6个默认成员函数

C++类和对象

C++析构拷贝赋值移动拷贝函数的几个知识点(不全)

C++初阶:类和对象(中篇)构造函数 | 析构函数 | 拷贝构造函数 | 赋值运算符重载

一个完整的C++类应该包含什么?