c++菜鸟求教 typedef struct

fanciex 2005-04-28 01:46:52
这是一段简单的struct定义

typedef struct PortDetail
{
public:
_bstr_t portDescription;
DWORD portNumber;
bool portIsDefault;

PortDetail()
{
portNumber = 0;
portIsDefault = true;
}

// Used to create a working copy during edit operation
PortDetail & operator = (PortDetail & portDetail)
{
portDescription = portDetail.portDescription;
portNumber = portDetail.portNumber;
portIsDefault = portDetail.portIsDefault;

return *this;
}
} PORT_DETAIL;

-------------------------------
其中不懂:
// Used to create a working copy during edit operation
PortDetail & operator = (PortDetail & portDetail)
{
portDescription = portDetail.portDescription;
portNumber = portDetail.portNumber;
portIsDefault = portDetail.portIsDefault;

return *this;
}

是何意思,哪位大虾给解释解释,谢了!
...全文
167 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
abaowu 2005-04-28
  • 打赏
  • 举报
回复
PortDetail() 是构造函数
PortDetail & operator = (PortDetail & portDetail) 是赋值函数

拷贝构造函数是在对象被创建时调用的,而赋值函数只能被已经存在了的对象调用。
PortDetail a,b;
PortDetail c = a; // 调用了拷贝构造函数
c = b;//调用了赋值函数
Cubebox 2005-04-28
  • 打赏
  • 举报
回复
重载了赋值运算符,我觉得这么写可能更好些:
PortDetail & operator = (PortDetail & portDetail)
{
if(this != &portDetail)
{
portDescription = portDetail.portDescription;
portNumber = portDetail.portNumber;
portIsDefault = portDetail.portIsDefault;
}
return *this;
}
塞纳河水 2005-04-28
  • 打赏
  • 举报
回复
运算符重载.
a112319124728 2005-04-28
  • 打赏
  • 举报
回复
PortDetail类的=号运算副的重载
来实现PortDetail类型的赋值
返回对象的指针
useresu 2005-04-28
  • 打赏
  • 举报
回复
运算符重载
赋值运算符的重载是经常用到的.

但是此处如果结构只有这三个成员的话,该重载是意义不大的,

因为编译器会默认生成=运算符实现赋值运算,
而且实现的功能就是拷贝一个对象,而且是按位拷贝的,
如果对象的成员没有指针或引用成员(并且保证你的=运算符是确实只想实现拷贝,而且是全部成员的
拷贝),则这种默认的拷贝是可以满足要求的,

当有指针或引用成员时,需要深度拷贝,默认的=运算符是不能满足要求的,
则需要自己定义,

楼主你重载的=运算符其实和默认的实现的功能是一样的.呵呵,
sunman1982 2005-04-28
  • 打赏
  • 举报
回复
回复人: fanciex(《编程》除错日当午,汗湿掌中鼠,谁知盘中餐,一粒几M?) ( ) 信誉:100 2005-04-28 14:14:00 得分: 0



PortDetail & operator = (PortDetail & portDetail)

这行每个单词的意义能否给解释解释 如PortDetail , & , operator = ,
(PortDetail & portDetail)



------------------------------------------------------

PortDetail是 返回类型 加上&以后是返回的引用,这样 返回值 可以作左值用了,operator=是重载操作符=,这里的作用就是创建一个portDetail对象的 拷贝,
建议,你 翻数找到“操作符重载”这一章研究一下
dongpy 2005-04-28
  • 打赏
  • 举报
回复
PortDetail & (函数返回值类型,PortDetail类型引用)operator = (重载的运算符函数)(PortDetail & portDetail)(参数类型,PortDetail类型引用)
beyondtkl 2005-04-28
  • 打赏
  • 举报
回复
... 基本的語法呀 老兄。。

PortDetail: some class;
& : 引用
operator =: = 運算符 這裡表示重載

(PortDetail & portDetail): 參數列表 表示傳入一個PortDetail對象的引用。。

然後返回一個對象的引用 一般示 *this.
fanciex 2005-04-28
  • 打赏
  • 举报
回复

PortDetail & operator = (PortDetail & portDetail)

这行每个单词的意义能否给解释解释 如PortDetail , & , operator = ,
(PortDetail & portDetail)
updatetrace 2005-04-28
  • 打赏
  • 举报
回复
对运算符重载,不同于其它函数的重载,对函数重载,它的参数是在括号里面,而对运算符重载,它的参数是在运算符的两边,如:PortDetail & operator = (PortDetail & portDetail)。运用起来A=B,可以解释为:
A & operator = (B & B)
{ A.portDescription=B.portDescription;
A.portNumber=B.portNumber;
A.portIsDefault=B.portIsDefault;
return *this;
}
但实际的程序是不能这样写的。只是方面对程序的解释。
whyglinux 2005-04-28
  • 打赏
  • 举报
回复
比如

PORT_DETAIL a, b;
// ...
a = b; // 实际上就是 a.operator=(b) 这样的函数调用。在这个运算符重载函数中实现了将对象 b 的成员给 a 的对应成员赋值的过程。程序最后 return *this; 意思是函数返回一个对 a 的引用(这里的this是指向对象 a 本身的一个指针,所以*this就是a对象),因此 a = b 表达式的结果是 a 对象。
oyljerry 2005-04-28
  • 打赏
  • 举报
回复
重载操作符=,这样程序中就可以使用=,而且会实现真正意义上的赋值
CACACACACA 2005-04-28
  • 打赏
  • 举报
回复
是呀,重载了“=“
返回的是一个引用,当
PorDetail a,b;
b.porNumver = 9;
当 a = b; 的时候就会调用这个涵数;
szws 2005-04-28
  • 打赏
  • 举报
回复
这个可以理解为运算符“=”重载阿!

64,682

社区成员

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

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