在上一章节中,我们讲解了封装,类,this指针,这一章节我们来讲解继承,多层继承,多重继承,构造函数和析构函数。
一.构造函数
构造函数时类的特殊成员函数,通常用于初始化对象。构造函数在创建对象时由编译器自动调用。C++中的每个类至少要有一个构造函数,如果类中没有定义构造函数,编译器会默认提供一个无参构造函数,默认的无参构造函数体也为空,不具有初始化意义。因此,在C++程序中要显示定义构造函数。
构造函数的定义
构造函数是类的特殊成员函数,C++编译器严格规定了构造函数的接口形式,其定义格式如下图所示:
class 类名{ 权限控制符: 构造函数名(参数列表){ 函数体 } ... }
关于构造函数定义格式的说明,具体如下:
1.构造函数必须与类名相同
2.构造函数名的前面不需要设置返回值类型
3.构造函数中无返回值,不能使用return返回
4.构造函数的成员权限一般设置为public
接下来我们根据具体的例子来为大家讲解:
<1>.无参构造函数
#include <stdio.h> struct Student{ int a; int b; Student(){ } Student(int c,int d){ a = c; b = d; } }; void Test(){ Student s1; } int main(){ Test; return 0; }
我们先来看这个无参构造函数,其作用相当于创建一个类的对象,没有赋初值。相当于C语言中的struct 函数题名 函数体变量
。
<2>.有参构造函数
接下来我们来看看有参数的构造函数:
#include <stdio.h> struct Student{ int a; int b; Student(int c,int d){ a = c; b = d; } }; void Test(){ Student s1(1,2); printf("%d %d",s1.a,s1.b); } int main(){ Test(); return 0; }
我们可以看到程序输出窗口输出了1和2,分别为s1中a的值和b的值。
那么我们就知道,带参数的构造函数完成了创建类的对象并且初始化对象。其作用相当于C语言中Student s1;s1.a=1;s1.b=2;
<3>.重载构造函数
我们在使用类的时候,有时候需要初始化对象,有时候不需要初始化对象,那么构造函数如何完成呢?我们可以用到函数重载:
struct Student{ int a; int b; Student(){ } Student(int c,int d){ a = c; b = d; } };
我们可以像这样定义类,当我们不需要初始化对象的时候,我们可以这样写:
Student s1;
当我们需要初始化对象的时候,我们就可以传入参数:
Student s1(1,2);
这样我们就可以将对象初始化了,使用起来非常方便。