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://www.cnblogs.com/helloforworld/p/5466142.html