类的赋值,请高手指点!谢谢了!

freeflying666 2008-12-27 11:57:44
class STU{
public:
.....
double x;
double y;
......
};

main()
{
.....
STU qws;
STU stu;
.....
stu=qws;
t=f(&stu); //如果可以整体赋值的话,那么当调用完这个函数时,qws的成员值会随着stu值的改变而改变吗?

}
double f(STU* stu)
{
....
STU qeu;
que=stu; //这样能实现将stu的所有成员值都赋值给que吗?即整体赋值可以吗?因为有的时候成员的值太多了,如果一个一个的赋值太麻烦了。
...
}
请各位高手多多指点,谢谢了!
...全文
182 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
as11qwer 2008-12-31
  • 打赏
  • 举报
回复
重载=
hai040 2008-12-31
  • 打赏
  • 举报
回复
缺省的=就是每个成员都=一次
如果确定所有成员的=都能实现目的,那就可以不用重载
redoffice 2008-12-31
  • 打赏
  • 举报
回复
自己实现拷贝构造函数,operator=和析构函数以实现深拷贝

建议深拷贝,浅拷贝的知识加深一下

另外还有重载运算符
lnever 2008-12-31
  • 打赏
  • 举报
回复
浅拷贝,深拷贝。
这是一个值得LZ实现代码的时候好好考虑的问题。
=的重载在lz需要的这个功能上几乎是必须的。
如果对系统默认的拷贝方式认识不深,很容易就会造成误用。
harry330 2008-12-31
  • 打赏
  • 举报
回复
定义复制运算符。
STU& operator=(const STU& obj)
{
if (this != & obj)
{
x = obj.x;
.......//复制其他
}
return *this;
}
jstar920 2008-12-30
  • 打赏
  • 举报
回复
我的理解是:默认的operator=和默认拷贝构造函数 是值(内容)拷贝,比如说
A a1=a2; 或者 A a1,a2; a1=a2; 时,只是把a2所占内存中的内容全部一模一样考到a1所占内存中。
因此所有的数据都会被赋值。
但是当数据中有指针存在时,必然会引起两个指针指向同一块内存,就容易引发错误,比如无效指针
因此建议重载operator=和拷贝构造函数!
freeflying666 2008-12-28
  • 打赏
  • 举报
回复
double f(STU* stu)
{
....
STU qeu;
que=stu; //这样能实现将stu的所有成员值都赋值给que吗?即整体赋值可以吗?因为有的时候成员的值太多了,如果
//可以赋值的,如果成员变量里面没有涉及到指针的内存分配和释放的话

多谢各位高手指点,谢谢!

我还想问一下:
也就是不存在中情况: 如f=new int;
delete f;
那么就可以整体赋值?



bfhtian 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 PcrazyC 的回复:]
重载=操作符即可

qws的成员值会随着stu值的改变而改变吗?//不会,内存都不一样了...
[/Quote]
一般重载操作符都会讲这个
PcrazyC 2008-12-28
  • 打赏
  • 举报
回复
重载=操作符即可

qws的成员值会随着stu值的改变而改变吗?//不会,内存都不一样了...
jstar920 2008-12-28
  • 打赏
  • 举报
回复
class STU{ 
public:
.....
double x;
double y;
......
};

main()
{
.....
STU qws;
STU stu;
.....
stu=qws;
t=f(&stu); //如果可以整体赋值的话,那么当调用完这个函数时,qws的成员值会随着stu值的改变而改变吗?
//不会改变的,因为qws,stu两个不同的变量,互不影响的}
double f(STU* stu)
{
....
STU qeu;
que=stu; //这样能实现将stu的所有成员值都赋值给que吗?即整体赋值可以吗?因为有的时候成员的值太多了,如果
//可以赋值的,如果成员变量里面没有涉及到指针的内存分配和释放的话

一个一个的赋值太麻烦了。
...
}
请各位高手多多指点,谢谢了!

建议楼主找本基础的书来看看,这个问题涉及到的一些概念包括 赋值运算符, 拷贝构造函数,默认的拷贝构造函数等等
xiaoyisnail 2008-12-28
  • 打赏
  • 举报
回复
建议定义类自己的operator=操作符,lz还是先看看书吧,类的构造函数,operator=,拷贝构造函数,析构函数这些基础知识先掌握一下吧
yangkunhenry 2008-12-28
  • 打赏
  • 举报
回复
这样能实现将stu的所有成员值都赋值给que吗?
不能,还是重载个“=”吧。
另外你这个函数的返回值(double)有点……
oyljerry 2008-12-28
  • 打赏
  • 举报
回复
定义个结构体的operator = 操作符来操作你想的赋值...
que=*stu;
xusleep 2008-12-28
  • 打赏
  • 举报
回复
1,重载=运算符,然后给每一个成员赋值(拷贝)
2,使用拷贝构造函数,STU stu = qws;
waizqfor 2008-12-28
  • 打赏
  • 举报
回复
用重载吧 安全可靠
alexhilton 2008-12-28
  • 打赏
  • 举报
回复
这里用的编译器的默认构造函数, 但是它有一个不好的地方就是它只复制地址, 建议自己写个函数或是用重载!这样更安全.
sysabod 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 freeflying666 的回复:]
double f(STU* stu)
{
....
STU qeu;
que=stu; //这样能实现将stu的所有成员值都赋值给que吗?即整体赋值可以吗?因为有的时候成员的值太多了,如果
//可以赋值的,如果成员变量里面没有涉及到指针的内存分配和释放的话

多谢各位高手指点,谢谢!

我还想问一下:
也就是不存在中情况: 如f=new int;
delete f;
那么就可以整体赋值?



[/Quote]
若类的成员变量中含有指针的话要用深拷贝策略,否则会造成指针重名,重载拷贝构造和析构,还有赋值运算服函数。
dboyback 2008-12-28
  • 打赏
  • 举报
回复
big three法则,自己实现拷贝构造函数,operator=和析构函数以实现深拷贝

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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