求助:类的拷贝构造和赋值构造的写法

snfttd29 2010-04-20 03:32:40
求助:关于含有指针变量和动态指针数组的类的拷贝构造和赋值构造的写法

请教一下,下面两个类的拷贝构造和赋值构造分别怎么写?

不胜感激!!!!

class A

{
private:
A(int v = 8):data( new int (v) ) { }
~A(){delete data;}
public:
int *data;
};

class B
{
private:
A(int sz = 100):max(sz), element( new int [max] ) { }
~A(){delete []element;}
public:
size_t max;
int *element;

}
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2010-04-20
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class A

{
public://¸úÏÂÃæµÄprivate¶Ôµ÷
A(int v = 8):data( new int (v) ) { }
~A(){delete data;}
A(const A& t);
A operator =(A &t);
friend ostream& operator <<(ostream &os,A& t);
private:
int *data;
};
A::A(const A& t)
{
data=new int();
*data=*(t.data);
}
A A::operator =(A &t)
{
if(this==&t)
return *this;
*data=*(t.data);
return *this;
}
ostream& operator <<(ostream &os,A& t)
{
os<<*(t.data);
return os;
}
class B
{
public://¶Ôµ÷
B(int sz = 100):max(sz), element( new int [max] ) {for(int i=0;i<max;++i) element[i]=0; } //这里改了下
~B(){delete []element;}
B(const B& t);
B operator =(B &t);
friend ostream& operator <<(ostream &os,B& t);
private:
size_t max;
int *element;

};//

B::B(const B& t)
{
element=new int[t.max];
max=t.max;
memcpy(element,t.element,t.max*sizeof(int));
}
B B::operator =(B &t)
{
if(this==&t)
return *this;
if(max<t.max)
{
delete []element;
element=new int[t.max];
}
max=t.max;
memcpy(element,t.element,t.max*sizeof(int));
return *this;
}
ostream& operator <<(ostream &os,B& t)
{
for(int i=0;i<t.max;++i)
os<<t.element[i]<<" ";
return os;
}
int main(void)//测试
{
A a,b(98),c(b);
B ba(5),bb(ba),bc(10);
cout<<"a : "<<a<<endl;
cout<<"b : "<<b<<endl;
cout<<"c : "<< c<<endl;
b=a;
cout<<"b : "<<b<<endl;
cout<<"ba: "<<ba<<endl;
cout<<"bb: "<<bb<<endl;
cout<<"bc: "<<bc<<endl;
bc=ba;
cout<<"bc: "<<bc<<endl;
system("pause");
return 0;
}
zht_304 2010-04-20
  • 打赏
  • 举报
回复
请参考C++ PRIMER 。。。
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
拷贝构造函数注意深拷贝,赋值运算符注意检查是不是给自身赋值。
linsj585 2010-04-20
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A

{
public://跟下面的private对调
A(int v = 8):data( new int (v) ) { }
~A(){delete data;}

private:
int *data;
};

class B
{
public://对调
B(int sz = 100):max(sz), element( new int [max] ) { } //是B……
~B(){delete []element;}
private:
size_t max;
int *element;

};//加分号

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧