三法则.复制构造函数,赋值操作符实现

Rule of Three. Copy Constructor, Assignment Operator Implementation

本文关键字:赋值操作符 实现 构造函数 复制      更新时间:2023-10-16

三原则。复制构造函数、赋值操作符实现

#include <iostream>
using namespace std;
class IntPart
{
public:
 IntPart(); // default constructor
 IntPart(int n); 
private:
 unsigned int* Counts;
 unsigned int numParts;
 unsigned int size;
};
IntPart::IntPart()
{
 Counts = new int[101] (); // allocate all to 0s
 numParts = 0;
}
IntPart::IntPart(int n)
{
 Counts = new int[n+1] (); // allocate all to 0s
 Counts[n] = 1;
 numParts = 1;
}
int main ()
{
 IntPart ip2(200);
 IntPart ip3(100);
 IntPart ip(ip2); // call default and copy constructor?
 IntPart ip4; // call default constructor
 ip4 = ip3;
 system("pause"); return 0;
}

显然这需要有三个规则。你能帮我定义一下吗?

IntPart ip(ip2);

是否创建调用默认构造函数的ip对象然后,调用复制构造函数?我说的对吗?

Q1。定义析构函数。

IntPart::~IntPart()
{ delete [] Counts; }

正确吗?

Q2。定义复制构造函数

IntPart::IntPart(const IntPart& a)
{ // how do I do this? I need to find the length... size.... could anybody can do this?
}

第三季。定义赋值操作符

IntPart& IntPart::operator= (const IntPart& a)
{
  if ( right != a)
  {
    // Anybody has any idea about how to implement this?
  }
  return *this;
}

谢谢,我很感激!

Q0。不,这只调用复制构造函数。这是一个相当大的误解,对象只构造一次

Q1。这是正确的

Q2。假设您打算将数组大小存储在size中。例如

IntPart::IntPart()
{
    Counts = new int[101] (); // allocate all to 0s
    numParts = 0;
    size = 101; // save array size
}

如果不将数组大小存储在某个地方,则无法编写复制构造函数。

第三季。我会查找复制和交换习语。这允许您使用复制构造函数编写赋值操作符。