C++编译器合成的默认函数(第一篇)

概述

我们都知道,编译器会给我们书写的类合成一些函数:构造函数、拷贝构造、拷贝赋值、析构函数等等。合成的函数都是public且inline的。但是什么时候合成呢?带着疑问我们往下看。

1、什么是构造函数?

构造函数就是一类特殊的成员函数,用来控制对象的初始化过程。无论何时类的对象被创建,就会自动调用构造函数,构造函数不能手动调用

语法:函数名与类名相同,并且没有返回类型的函数。
说明:
1、类可以包含多个构造函数,和重载函数差不多。
2、构造函数不能被声明成const的。
3、跟防控属性无关系,可以是public、protected或者private。

class SalesData
{
	SalesData(){};		//没有参数的构造函数
	SalesData(int a = 5, char c = ‘a’){}; //含有默认参数的“无参构造”
	SalesData(int ia, int ib){};	//含有两个int参数的构造函数
}

通过上面的例子,我们可以看出:无参构造并一定是没有参数的,而是可以用无参的形式被调用

但是实际上我们写代码时,有时会不写构造函数,但是为啥类的对象也可以创建?

2、默认构造

如果我们没有编写构造函数时,编译器会在需要的时候给我们合成一个默认的构造函数。注意是在需要的时候,什么时候是需要的时候?先看一个列子:

class Foo
{ 
public: 
	int ival; 
	Foo* pNext; 
};

这里正确的语意是要求Foo有一个构造函数,可以将两个成员变量初始化为0。但是这里编译器并没有合成构造函数。其间的差别在于一个是程序的需要,一个是编译器的需要。程序有需要那是程序员的责任,上面的例子就是程序的需要,而不是编译器的需要。

只有编译器合成出的构造函数是有用的,可以进行一些默认调用时,编译器才会合成。主要分为了下列四种情况:

2.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值