C++中的构造函数学习
目前学习了北京大学的C++课程,里面介绍了构造函数的详细内容,于是做了如下笔记。
1.构造函数是用来初始化对象的,其参数也可以是缺省的和普通成员函数没有区别,其属性也有private,public,protected三种,但是最多的当然是public属性。但是构造函数和普通成员函数很大的区别在于构造函数没有返回值,而成员函数必须要有相应返回值。构造函数既可以由编译器自动生成,也可以由我们自己编写,构造函数的参数很重要,因为其参数完成了我们对对象成员的初始化,这也是构造函数存在的意义。
构造函数还可以和数组结合起来使用,数组其实也就是多个对象,我们可以通过构造函数对多个对象进行初始化。下面是简单的程序:
class Complex { private: int real, img; public: Complex(int r); Complex(int r, int i); Complex(Complex c1, Complex c2); }; Complex::Complex(int r) { real = r; img = 0; } Complex::Complex(int r, int i) { real = r; img = i; } Complex::Complex(Complex c1, Complex c2) { real = c1.real + c2.real; img = c1.img + c2.img; }
下面是对构造函数的调用的程序,用于对对象的初始化,包括与数组的结合使用。
Complex c1(5), c2(5, 5), c3=Complex(c1, c2); Complex c4[3] = { 2,Complex(3,9),(2,3) };
2.复制构造函数。只有一个函数参数是对同类对象的引用,形式为X::X(X& )或者X::X(const X &),X即为定义的类类型。和构造函数一样,当没有定义复制构造函数时,系统编译器也会自动生成复制构造函数,完成相应的复制功能。注意:复制构造函数只有一个。
复制构造函数有三个作用:1.使用一个对象对另一个对象进行初始化。2.函数形参中含有类的对象,那么当该函数调用时,类的复制构造函数将会被调用,形参的值和实参的值未必相等。3.函数的返回值为类的对象时,则函数返回时会调用复制构造函数。
3.类型转换构造函数(构造函数的一种)。只有一个参数,能实现类型的自动转换,可参考下面的代码:
class AB { public: double real, img; public: AB(double i) { cout << "the Function1 is called " << endl; real = i; img = 0; } AB(double r, double m) { cout << "the Function2 is called " << endl; real = r; img = m; } }; int main() { AB a1(6,7); AB a2 = 9; a1 = 10; cout << a1.real << ";" << a1.img << endl; return 0; }
a2=9与a1=10这两条语句都调用了类型转换构造函数,区别在于a2=9完成了对象a2的初始化,第二条语句会临时创建一个AB的对象,然后完成赋值给a1。
本人博客已迁往 https://chenlongxiabc.github.io 欢迎访问。
博客内容均为自己编写,其中参考了相关内容。若有侵权他人请联系我,并对此表示歉意。若要转载或是其他用途,请联系我。我的邮箱diegefulan@hotmail.com