【cpp】构造函数

一、Cpp中的构造函数有哪些

  构造函数主要分为三类:
  默认构造函数(无参构造函数)、有参构造函数、拷贝构造函数(包括了拷贝赋值运算符,移动构造函数,移动赋值运算符)
在这里插入图片描述

二、成员列表

三、编译器为我们声明的构造函数

编译器可以为我们生成六种构造函数,但不是所有的都会生成
在这里插入图片描述
   1. 对于默认构造函数:只要出现其他构造函数,编译器就不会为我们声明默认构造函数。例子:
在这里插入图片描述
   2. 拷贝构造函数:只有用户没有定义 移动构造函数移动赋值运算符 ,编译器偷偷为我们声明;一旦出现了 移动构造函数移动赋值运算符,编译器就不会声明这些。

   3. 拷贝赋值运算符:只有用户没有定义 移动构造函数移动赋值运算符 ,编译器偷偷为我们声明;一旦出现了 移动构造函数移动赋值运算符,编译器就不会声明这些。

通常:拷贝构造函数和拷贝赋值运算符 会同时出现或者消失

   4. 析构函数。

   5. 移动构造函数:只有用户没有定义 拷贝构造函数, 拷贝赋值运算符, 析构函数 和 移动赋值运算符时,才会生成。只要出现其中一个就不会生成。

   6. 移动赋值运算符:只有用户没有定义 拷贝构造函数, 拷贝赋值运算符, 析构函数 和 移动构造函数时,才会生成。只要出现其中一个就不会生成。

三、default、delete、noncopyable

1. default:

  类A中自己定义构造函数之后,编译器不会为我们声明默认构造函数了 ----> 实例化A时,若使用到了默认构造函数实例化,则会编译器报错 ---->解决方法1:只能自己显示声明一个默认构造函数,但是效率不高 ----> 解决方法2:C++11中,提供 ”=default“ ,放在显示声明的默认构造函数之后,让编译器生成自己的默认构造函数.实例化A时,若使用到了默认构造函数实例化,则会调用编译器提供的默认构造函数 。

2. delete:

  C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错。
  作用:防止自己不希望调用的函数调用,如:
     1.防止隐式转换转换
     2.防止类实例对象的拷贝赋值

#include <cstdio>

class TestClass
{
public:
    void func(int data) { printf("data: %d\n", data); }
    void func(double data)=delete;	///防止隐式转换
};
int main(void)
{
    TestClass obj;
    obj.func(100);
    obj.func(100.0);

    return 0;
}

四、拷贝构造函数

深浅拷贝

五 、赋值运算符构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值