C++中有这么一种特殊的函数,它在类里,与类名同名,且没有返回值的一个函数,只要我们定义一个类的对象,系统就会自动调用它,进行专门的初始化对象用,而大多数情况下,因为我们没有定义构造函数,系统会默认生成一个默认形式、隐藏着的构造函数,这个构造函数的函数体是空着的,因此不具有任何功能。
那么下来,我们将教大家如何定义自己的构造函数,需要用户自行定义了至少一个构造函数,系统就不在自动生成,而是根据用户定义的构造函数选择最匹配的一个进行调用。
例如还是Student类的例子,我们添加一个带有默认参数的构造函数,代码如下:
#include<iostream> #include<Cstring> using namespace std; class Student { private: int num;//学号 char name[100];//名字 int score;//成绩 public: Student(int n,char *str,int s); int print(); int Set(int n,char *str,int s); }; Student::Student(int n,char *str,int s) { num = n; strcpy(name,str); score = s; cout<<"Constructor"<<endl; } int Student::print() { cout<<num<<" "<<name<<" "<<score; return 0; } int Student::Set(int n,char *str,int s) { num = n; strcpy(name,str); score = s; } int main() { Student A(100,"dotcpp",11); A.print(); return 0; }
即可以在定义的同时调用构造函数,实现初始化的作用,运行如下图:
需要注意的是,由于我们已经在类中定义了一个带默认参数的构造函数,则系统不会再自动生成,这个时候我们定义对象的时候也需要传入三个默认初始值,因为构造函数可以重载,系统会找最匹配的一个函数,但如果定义时不是带默认参数的构造函数,则会报错,请大家自行上机实验!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程