提问人:user2310042 提问时间:4/23/2013 最后编辑:johnuser2310042 更新时间:4/23/2013 访问量:956
三法则。Copy 构造函数、赋值运算符实现 [已关闭]
Rule of Three. Copy Constructor, Assignment Operator Implementation [closed]
问:
三法则。复制构造函数、赋值运算符实现
#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;
}
显然,这需要有三法则。 你能帮我定义它们吗?
问题0.
IntPart ip(ip2);
这是否创建调用默认构造函数的 ip 对象 之后,调用 copy constructor? 我说得对吗?
问题1.定义析构函数。
IntPart::~IntPart()
{ delete [] Counts; }
这是对的吗?
问题2.定义复制构造函数。
IntPart::IntPart(const IntPart& a)
{ // how do I do this? I need to find the length... size.... could anybody can do this?
}
问题3.定义赋值运算符。
IntPart& IntPart::operator= (const IntPart& a)
{
if ( right != a)
{
// Anybody has any idea about how to implement this?
}
return *this;
}
谢谢 我将不胜感激!
答:
3赞
john
4/23/2013
#1
问题0.否,这仅调用复制构造函数。这是一个相当大的误解,物体只被构造一次。
问题1.没错
问题2.据推测,您打算将数组大小存储在 中。例如size
IntPart::IntPart()
{
Counts = new int[101] (); // allocate all to 0s
numParts = 0;
size = 101; // save array size
}
如果不将数组大小存储在某个地方,则无法编写复制构造函数。
问题3.我会查找副本并交换成语。这允许您使用 copy 构造函数编写赋值运算符。
上一个:不同类型的 C++ 模板错误
下一个:C++ 析构函数,动态分配
评论
Counts
a.Counts
Counts
std::vector<int>