构造函数(基础)
创始人
2024-05-24 22:32:13
0

目录

一、基本概念

二、特性

(一)特征 

1. 函数名与类名相同

2. 无返回值(void也不行)

3. 对象实例化时编译器自动调用对应的构造函数

4. 构造函数可以重载 

(二)举例:不利用构造函数初始化对象

(三)举例:利用构造函数初始化对象

(四)举例

1. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数

2. 一旦用户显式定义编译器将不再生成

3. 解决调用默认构造函数的方法

三、注意


一、基本概念

  • 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次 

二、特性

  • 构造函数的主要任务并不是开空间创建对象,而是初始化对象

(一)特征 

1. 函数名与类名相同

2. 无返回值(void也不行)

3. 对象实例化时编译器自动调用对应的构造函数

4. 构造函数可以重载 

(二)举例:不利用构造函数初始化对象

#include
using namespace std;
class Date
{
private:int _year;int _month;int _day;
public:void Init(int year, int month, int day)//定义初始化函数{_year = year;_month = month;_day = day;}void Print()//打印函数{cout << _year << "-" << _month << "-" << _day << endl;}
};
int main()
{Date d1;d1.Init(2022, 8, 9);d1.Print();//2022-8-9return 0;
}

(三)举例:利用构造函数初始化对象

#include
using namespace std;
class Date
{
private:int _year;int _month;int _day;
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print()//打印函数{cout << _year << "-" << _month << "-" << _day << endl;}
};
int main()
{Date d1(2022, 8, 9);//对象实例化时,自动调用构造函数d1.Print();//2022-8-9return 0;
}

(四)举例

1. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数

//举例1:类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数
#include
using namespace std;
class Date
{
private:int _year;int _month;int _day;
public:void Print()//打印函数{cout << _year << "-" << _month << "-" << _day << endl;}
};
int main()
{Date d1;//d1调用系统生成的无参构造函数d1.Print();return 0;
}

2. 一旦用户显式定义编译器将不再生成

 

3. 解决调用默认构造函数的方法

  • 第一种调用系统默认的无参构造函数
  • 第二种自己实现无参构造函数

#include
using namespace std;
class Date
{
private:int _year;int _month;int _day;
public:Date(){_year=0;_month = 1;_day = 2;}Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print()//打印函数{cout << _year << "-" << _month << "-" << _day << endl;}
};
int main()
{Date d1;d1.Print();Date d2(2022, 9, 14);d2.Print();return 0;
}
  • 第三种利用全缺省的构造函数

 

#include
using namespace std;
class Date
{
private:int _year;int _month;int _day;
public:Date(int year=2021, int month=1, int day=8){_year = year;_month = month;_day = day;}void Print()//打印函数{cout << _year << "-" << _month << "-" << _day << endl;}
};
int main()
{Date d1;d1.Print();Date d2(2022, 9, 14);d2.Print();return 0;
}

三、注意

  • 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...