构造函数的魔力

【摘要】C++作为C语言的继承,具有C语言的一些特性,C++主要是面向对象,因此离不开类的使用,而类的使用和C语言里面的结构体很像,不过,它比结构体更加灵活。今天我就把使用类时碰到的关于构造函数的知识整理起来,因为构造函数实在是太多变了,我觉得很有必要写出来,希望可以帮助到你们。
类为什么不能进行初始化?
因为类就像结构体一样只是进行了声明,并没有实际的开辟空间,所以无法对数据成员进行初始化,这时候要想初始化只能借助构造函数
什么是构造函数?
1.构造函数是一种特殊的成员函数,与其他的成员函数不同,不需要用户调用它,而是在建立对象时自动执行。
2.构造函数的名字必须和类名同名,而不能任意命名,以便编译系统可以识别。
3.构造函数不具有任何类型,不返回任何值
4.构造函数其实不光可以执行初始化,还可以进行其他操作,但是为了让程序保持清晰的思路,一般不建议这么做。
5.千万不要自己去调用构造函数,这是极其错误的行为
要想使用好构造函数,这上面的几点一定要牢记,接下来我就分析一下构造函数具有哪些形式。
ps:由于我之前的笔风都是偏严肃,但是实际上我的性格比较活泼,所以不喜欢太生硬的陈述,这次我决定小小改变一下,让文章可以看着活泼一点,不那么死板

对象的初始化
在C++里面,声明一个类时,并不能直接进行初始化,这时候,你要还是想初始化该怎么办呢?这就要用到构造函数了。
构造函数进行对象的初始化可谓是得心应手,但是构造函数的形式实在是太多了,所以我决定分几种类型进行说明
1.在构造函数内部直接进行初始化
虽然C++的语法就是不允许类直接进行初始化,但是它又增加了一个构造函数来间接初始化,关键是这个构造函数是相当的好用啊。我刚上手几天就感觉到了,哈哈哈,初学者的福音。废话不多说,先将代码放在下面,稍后解释
无参构造函数,最简单的一种

  class Student
{
public:
    Student(); //不做任何操作,默认初始值为0
private:
    int score[3];
    char name[20];
}  

上面这种事最简单的,你可以把它这样认为,构造函数是会自动生成的,但是这一步你并不能看到,而你显式地把它写出来,是为了方便理解,因为C++编译器会做很多我们看不到的内部操作,这样做事为了新手更好的理解。

 class Box
{
public:
     //声明一个无参的构造函数
    Box(int h=10,int w=20,int len=10);
    //Box(int h,int w,int len):height(h),width(w),length(len){}
      //定义一个有参的构造函数,用参数的初始化表对数据成员初始化

上面应该很好理解吧,毕竟我也是个初学者,但是还是很容易看懂呢。
抓住一个点,自动调用,所以这种类型的构造函数就是在定义一个类之后,将类里面的对象直接赋初值
再来接着看下面这种

   Box::Box(int h,int w,int len)//类外定义无参构造函数Box
{
    height=h;
    width=w;
    length=len;
} 

这是在类外定义的无参构造函数,这点和在类外定义成员函数是类似的,都需要在类体中先进行声明。类外定义的无参构造函数,它的运作机制大概是下面这样的
1.在定义对象时,就已经将实参给出
2.在建立对象时,编译器要做的就是把实参的值传递给构造函数相应的形参然后把他们直接作为数据成员的初值
记住,这里的初始化相当于是主函数中完成的,只是将实参传了过去。

构造函数的参数列表
如上所述,构造函数可以通过实参传递给构造函数的形参,从而完成初始化,其实,他还可以将初始化变成多种形式

Box box1;
    cout<<"The volume of box1 is"<<box1.volume()<<endl;
    Box box2(15);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;
    Box box3(15,25);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;
    Box box4(15,25,30);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;

上面的代码,就是利用了构造函数参数列表进行的初始化。box1传递了一个实参,因此,其余的两个参数都需要直接依靠构造函数给出的形参进行初始化,而其余的也分别给出了两个和三个。
但是你要知道的是,传递给构造函数的参数必须类型是准确的,否则它会因为无法识别类型而报错。
总结:构造函数的形式真的可以说是千变万化的,但是我们只要熟悉了这几种常见的类型,那就可以触类旁通,掌握这个知识点。
注:如果有什么问题,欢迎给我留言或者私信啊,我很热心的,希望可以在这里交到很好的朋友,感谢啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章