@cxm-2016
2016-09-06T15:37:57.000000Z
字数 1012
阅读 1681
c++
no
作者:陈小默
C++中自动提供了下列五种成员函数
如果我们没有提供构造函数,那么C++将会自动创建一个默认的构造函数。这个构造函数不接受任何参数,也不执行任何操作。当我们定义了构造函数,C++将不再提供默认的构造函数。如果我们希望在创建对象的时候不显式的对它进行初始化,就必须要提供一个默认的构造器。当然我们也可以使用默认参数列表的构造函数来充当默认构造器。下列两种方法都可以作为默认构造器:
Vector();
Vector(double x=0,double y=0);
需要注意的是,我们不能同时定义上述两种方法。对于编译器来说这会产生二义性,比如当我写出下面的代码时,编译器就不知道具体要调用哪一种构造方法了。
Vector v;
同理,当我们没有提供显式的声明一个析构函数时,C++会为我们提供一个默认的无行为的析构函数。
注意这是一个构造函数。复制构造函数的作用是将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中,而不是常规的复制过程中。类的复制构造函数原型通常如下:
ClassName(const ClassName &);
它接受一个指向类对象的常量作为参数。
新建一个对象并将其初始化为已有的对象时,复制构造函数将会被调用。假如现在已经有了一个Vector对象v
Vector v1(v);
Vector v2 = v;
Vector v3 = Vector(v);
Vector * v4 = new Vector(v);
最后一种声明使用v初始化一个匿名对象,并且将新对象的直线赋给了v4指针。这里需要注意的是,按值传递意味着创建原始变量的一个副本并产生一个临时对象。由于按值传递对象将调用复制构造函数,因此我们应该尽量使用按引用传递,这样可以节省调用构造函数的时间以及存储新对象的空间。
默认复制构造函数会逐个复制非静态成员,复制的是成员的值。
在默认情况下,赋值运算符将调用复制构造函数,就像上面示例的v2。
隐式地址运算符返回调用对象的地址(即this指针的值)。