目录
一、缺省参数
(一)缺省参数概念
(二)缺省参数分类
1. 全缺省参数
2. 半缺省参数(缺省部分参数)
3. 注意
二、函数重载
(一)基本概念
(二)举例
三、构造函数基本概念
四、构造函数特性
(一)特征
1. 函数名与类名相同
2. 无返回值(void也不行)
3. 对象实例化时编译器自动调用对应的构造函数
4. 构造函数可以重载
(二)举例:不利用构造函数初始化对象
(三)举例:利用构造函数初始化对象
(四)举例
1. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数
2. 一旦用户显式定义编译器将不再生成
3. 解决调用默认构造函数的方法
五、注意
一、缺省参数
(一)缺省参数概念
- 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参
#include<iostream>
using namespace std;
void test(int a=1)
{
cout << a << endl;
}
int main()
{
test(11);//11
test();//1
return 0;
}
(二)缺省参数分类
1. 全缺省参数
#include<iostream>
using namespace std;
void test(int a = 1, int b = 2, int c = 3, int d = 4)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
cout << endl;
}
int main()
{
test();//a,b,c,d都使用缺省的
return 0;
}
2. 半缺省参数(缺省部分参数)
#include<iostream>
using namespace std;
void test(int a=1,int b=2,int c=3,int d=4)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
cout << endl;
}
int main()
{
test();//a,b,c,d都使用缺省的
test(11);//给a传参,b、c、d使用缺省的
test(11,22);//给a、b传参,c和d使用缺省的
test(11, 22, 33);
return 0;
}
3. 注意
- 半缺省参数必须从右往左依次来给出,不能间隔着给(也就是调用时,传参从左向右依次传参,不能空缺)
- 缺省参数不能在函数声明和定义中同时出
二、函数重载
(一)基本概念
- 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题
(二)举例
#include<iostream>
using namespace std;
// 1、参数类型不同
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
// 2、参数个数不同
void test()
{
cout << "test()" << endl;
}
void test(int a)
{
cout << "test(int a)" << endl;
}
// 3、参数类型顺序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
int main()
{
Add(1, 2);
Add(1.4, 5.7);
test();
test(66);
f(11, 'a');
f('a', 16);
return 0;
}
三、构造函数基本概念
- 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次
四、构造函数特性
- 构造函数的主要任务并不是开空间创建对象,而是初始化对象
(一)特征
1. 函数名与类名相同
2. 无返回值(void也不行)
3. 对象实例化时编译器自动调用对应的构造函数
4. 构造函数可以重载
(二)举例:不利用构造函数初始化对象
#include<iostream>
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-9
return 0;
}
(三)举例:利用构造函数初始化对象
#include<iostream>
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-9
return 0;
}
(四)举例
1. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数
//举例1:类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数
#include<iostream>
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<iostream>
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<iostream>
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;
}
五、注意
- 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数