C++:特殊成员函数

C++:特殊成员函数

标签(空格分隔): c++
作者:陈小默


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指针的值)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值