C++之“构造函数”

文章目录

类的默认成员函数

默认成员函数就是我们没有在main函数里调用,但是编译器会自动生成的成员函数称为默认成员函数。

C++由8个默认成员函数,我们暂时了解6个。

默认成员函数:构造函数,析构函数,拷贝构造,取地址,重载。赋值重载,移动构造和移动赋值

构造函数

构造函数是特殊的成员函数

构造函数是在对象实例化的时候,初始化对象(相当于Init函数的功能)。 构造函数并不是 开空间创建对象,我们常使用的局部对象在栈帧创建的时候,空间就已经创建好了。

构造函数的特性:

  1. 构造函数的函数名与类名相同
    比如:类是:class Person{};,那么在类里面的构造函数就是
cpp 复制代码
class Person
{
    Person()
    {}
}
  1. 没有返回值。(C语言中没有返回值需要在函数名前面写void,这里不需要写void)
  2. 对象实例化的时候,系统会自动调用相应的构造函数。(即调用那个和类名一样的函数,不需要我们再写Init)
cpp 复制代码
#include<stdio.h>
#include<iostream>
class Data
{
public:
	Data()  //无参的构造函数
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}
	Data(int year,int month,int day)  //有参的
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Print()   //千万记得,是构造函数不写void,其余的还是要写的
	{
		std::cout << _year << "/" << _month << "/" << _day << std::endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1;  //调用无参的
	          //没有参数的时候,不能加()

	Data d2(1234,5,6); //调用带参的构造函数
	d1.Print();
	d2.Print();
	return 0;
}
  1. 构造函数可以重载,只要参数不同即可。

    但是注意:无参的构造函数和全缺省的构造函数不可以同时存在,在调用时会出现歧义。
  1. 如果我们没有在类中定义构造函数,则C++会自动生成一个无参的默认构造函数(但是否初始化,尚未可知)。

如果我们在类中定义了构造函数,编译器将不再生成,而是自动调用我们定义的构造函数。

  1. 是否初始化:

前言:C++把类型分成内置类型(基本类型)自定义类型
内置类型 就是语言提供的原生数据类型(int/char/double/指针 等)
自定义类型 就是我们使用class/struct等关键字自己定义的类型

  • 编译器默认生成的构造,对内置类型成员变量的初始化没有要求,即不一定初始化。
  • 对于自定义类型成员变量,要求调用这个成员变量的默认构造函数初始化
  • 【注意】:默认构造函数并不单单是:编译器默认生成的构造函数。
    默认构造函数有3种:<1>无参构造函数、<2>全缺省构造函数、<3>我们不写构造时编译器默认生成的构造函数。但是是这三个函数有且只有一个存在,不能同时存在。。。。总结一下就是不传实参就可以调用的构造就叫默认构造

    如果这个成员变量,没有默认构造函数,那么就会报错
相关推荐
qq_433554545 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
努力学习编程的伍大侠9 分钟前
基础排序算法
数据结构·c++·算法
数据小爬虫@24 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.26 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy32 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader39 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默1 小时前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
yuyanjingtao1 小时前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot