复制构造函数

和普通构造函数的区别:

普通构造函数在对象创建时被调用。
复制构造函数在用已有对象复制到一个新对象时被调用。
复制构造函数由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其形参必须是引用,但并不限制为const,一般普遍的会加上const限制。

何时调用

  1. 一个对象作为函数参数,以值传递的方式传入函数体;
  2. 一个对象作为函数返回值,以值传递的方式从函数返回;
  3. 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会自动生成一个来进行对象之间非static成员的位拷贝。
举例:
1、声明复制构造函数

#include 
#ifndef STRNGBAD_H_
#define STRNGBAD_H_
class StringBad
{
    private:
      int a;
      int b;
    public:
      StringBad(const StringBad &s);// 声明复制构造函数
      StringBad();// 声明构造函数
      ~StringBad();
};
#endif

2、定义复制构造函数

StringBad::StringBad(const StringBad &s)
{
  a = s.a;
  b = s.b;
}

调用举例

1、函数参数为类的对象

void func(StringBad p) // 函数形参为类的对象
{
  cout << p.a;
}
int main()
{
  p(1,2);// 构造出对象p.
  func(p);// 将实参传递给形参完成一个拷贝,会调用复制构造函数
  return 0;
}

2、函数的返回值为类的对象时

StringBad func()
{
  StringBad s (1,2);
  return s;
}
int main()
{
  StringBad p = func();
  return 0;
}

3、对象赋值初始化

int main()
{
  StringBad p1(1,2); // 构造函数创建对象p1。
  StringBad p2(p1);//用对象p1 复制出对象p2(通过复制构造函数实现)
  return 0;
}

参考链接

你可能感兴趣的:(C++,物联网)