zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    MongoDB理解
    jQuery+Ajax+PHP实现异步分页数据显示
    PHP设计模式四:适配器模式
    PHP设计模式三:原型设计模式
    Event Managers
    NetAdvantage
    英语
    CA1060
    DateTime和DateTime2
    宿主进程 vshost.exe
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5466142.html
Copyright © 2011-2022 走看看