前言
1、当你定义一个类,并用该类定义一个对象时,是否思考过这样一个问题:这个对象是怎么初始化的?
2、其实当你定义一个对象时,系统会自动调用一个隐式的函数,叫做构造函数,它会帮助你初始化你的对象。
一、构造函数的作用
创建对象时初始化对象,为对象的成员变量赋值
二、构造函数语法
1、名字必须与类名相同,无返回值,可以有参数
2、用户无法调用
3、一般权限为public
4、实例化对象时只能用到一个构造函数
5、构造函数可以显式定义,定义后默认构造函数将不会生成
例子:
#include<iostream>
using namespace std;
class Student
{
private:
string name;
int number;
public:
Student(){}//构造函数
}
三、构造函数的初始化
1、构造函数可以给成员变量赋值,也可以初始化
2、初始化:
#include<iostream>
using namespace std;
class Student
{
private:
string name;
int number;
public:
Student(string n,int num):name(n),number(num){}//初始化
}
3、赋值:
#include<iostream>
using namespace std;
class Student
{
private:
string name;
int number;
public:
Student(string n,int num)
{
name=n;
number=num;
}//赋值
四、拷贝构造函数
1、当你对象很多觉得一个一个初始化太麻烦,想用已有的对象来初始化一个新的对象,这就轮到拷贝构造函数出场了
2、拷贝构造函数和构造函数一样,都是隐式的,但是可以显示去定义它
3、例子:
#include<iostream>
using namespace std;
class Student
{
private:
string name;
int number;
public:
Student(string n,int num):name(n),number(num){}//构造函数
Student(const Person &other):name(other.name),number(other.number){}//拷贝构造函数
4、这里尤其要注意,当你只定义一个拷贝构造函数,默认构造函数和默认拷贝构造函数都不会生成,所以你无法定义你的第一个对象,更无从说起拷贝二字了
五、拷贝构造函数的三种使用情况
1、用已有的对象来初始化一个新的对象
2、函数的参数为类的对象
3、当函数的返回值是类的对象时,调用拷贝构造函数
总结
构造函数是一种非常特殊的函数,首先它写法很特殊,其次无法调用,它发挥作用但是藏在幕后