构造函数:
一:什么是构造函数:
构造函数是特殊的类成员函数
构造函数创建对象时初始化对象--为对象成员变量赋初始值
二:构造函数的定义
为什么需要构造函数:方便初始化对象
其他的赋值方式呢?
1、先访问在给值
2、专门写一个函数给值
为什么不直接用别的赋值方式,而用构造函数初始化对象,因为c++是面向对象的思想,后面还要用到继承,封闭,等等
用构造函数是比其他赋值方式更好的
三:构造函数的语法要求:
1、函数名和类名相同
2、没有返回值类型和返回值
3、满足重载条件可以重载(因为构造函数没有返回值类型和返回值)
举个例子:
#include<iostream>
#include<string>
using namespace std
class myclass
{
public:
myclass(){}//无参构造
myclass(int a){}//带参构造,类中实现
myclass(char ch);//带参构造,类外实现
};
myclass::myclass(char ch)
{
}
构造函数的调用时机:
1、创建对象的时候系统自动调用,不需要也不能自己调用
2、通过控制实参,可以控制调用的构造函数的重载
构造函数的特点
:1、如果用户提供了构造函数(自己写了)
那么系统就不再提供默认构造(低保没了)
2类中如果只有有参构造,没有无参构造,(自己写了)
那么就不能调用默认构造的方式初始化对象(低保没了)
想用这种方式初始化对象那么久提供无参构造(再写一个)
成员初始化列表:
初始化列表也是给类中数据成员初值的一种方式。
成员初始化列表的语法:
1、不能用于除构造函数之外的其他成员函数。
2、位于形参表的右括号之后,函数体左括号之后。
3、成员初始经列表由逗号分隔的初始化列表组成(前面带冒号)。
4、必须用这种格式来初始化非静态const数据成员。
5、必须用这种格式来初始化引用数据成员
成员初始化列表
代码格式:
类名::构造函数名(形参表)
:数据成员1(数据1),数据成员2(数据2)......数据成员n(数据n)
{
函数体
}
比如:
#include<iostream>
#include<string>
using namespace std;
classname::classname(int n, int v)
:num(n), val(v)
{
num = n;
cout << "调用了两个参数的构造函数" << endl;
}