📄 subject_54114.htm
字号:
<p>
序号:54114 发表者:Bardo 发表日期:2003-09-25 16:48:23
<br>主题:如果构造函数中既有成员初始化,又有基类初始化?调用顺序如何安排?
<br>内容:如果构造函数中既有成员初始化,又有基类初始化?调用顺序如何安排?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-25 17:08:22
<br>内容:自己试试不就知道了吗?!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:iwill 回复日期:2003-09-25 17:21:34
<br>内容:基类的初始化通过成员初始化列表传给基类的构造函数,在子类的构造函数中不再赋值初始化
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Bardo 回复日期:2003-09-25 22:10:02
<br>内容:TO:1楼,我担心还有什么额外的规定!!<BR><BR>TO:2楼:我是说子类中有成员要初始化,此成员只属于子类。<BR>如:<BR>Class CMySharp<BR>{<BR>public:<BR>CMySharp(int cx, int cy);<BR>~CMySharp();<BR>Private:<BR>int x;<BR>int y;<BR>}<BR>Class CMyPoint3D<BR>{<BR>public:<BR>CMyPoint3D(int cx, int cy, int cz);<BR>~CMyPoint3D();<BR>Private:<BR>int x;<BR>int y;<BR>int z;<BR>}<BR><BR>Class CMy3Pyramid:Public CMyShap<BR>{<BR>public:<BR>//这里构造函数怎么写呢?可能有两种方式<BR>//第一种:<BR>CMy3Pyramid(int x, int y, CMyPoint3D &pt3d):CMySharp(x, y):CMyPoint3D(pt3d);<BR>//第一种:<BR>CMy3Pyramid(int x, int y, CMyPoint3D &pt3d):CMyPoint3D(pt3d):CMySharp(x, y);<BR>//问题是,这两个调用有先后吗?<BR>~CMy3Pyramid();<BR>Private:<BR><BR>CMyPoint3D MyTop;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:学vc 回复日期:2003-09-26 19:38:04
<br>内容:楼主的程序太糟糕了啊。<BR>关键字都不区分大小写!!!,ft<BR>下面是我的例子:<BR>#include <iostream.h><BR>class CMySharp<BR>{<BR>public:<BR> CMySharp(int cx, int cy){cout<<"CMySharp constructor!!"<<endl;};<BR> ~CMySharp(){};<BR>private:<BR> int x;<BR> int y;<BR>};<BR><BR>class CMyPoint3D<BR>{<BR>public:<BR> CMyPoint3D(int cx, int cy, int cz){cout<<"CMyPoint3D constructor!!"<<endl;};<BR> CMyPoint3D(CMyPoint3D &pt){};<BR> ~CMyPoint3D(){};<BR>private:<BR> int x;<BR> int y;<BR> int z;<BR>};<BR><BR>class CMy3Pyramid:public CMySharp<BR>{<BR>public:<BR> //这里构造函数怎么写呢?可能有两种方式<BR> //第一种:<BR> CMy3Pyramid(int x, int y, CMyPoint3D &pt3d):CMySharp(x, y),MyTop(pt3d)<BR> {cout<<"CMy3Pyramid constructor!!"<<endl;};<BR> //第一种:<BR>// CMy3Pyramid(int x, int y, CMyPoint3D &pt3d):CMyPoint3D(pt3d):CMySharp(x, y){};<BR> //问题是,这两个调用有先后吗?<BR> ~CMy3Pyramid(){};<BR>private:<BR> <BR> CMyPoint3D MyTop;<BR>}; <BR><BR>void main()<BR>{<BR> CMyPoint3D pt3d(7,8,9);<BR> CMy3Pyramid obj(1,2,pt3d);<BR>}<BR>输出的结果是---<BR>CMyPoint3D constructor!!<BR>CMySharp constructor!!<BR>CMy3Pyramid constructor!!<BR><BR>将构造函数改为<BR>CMy3Pyramid(int x, int y, CMyPoint3D &pt3d):MyTop(pt3d),CMySharp(x, y)<BR> {cout<<"CMy3Pyramid constructor!!"<<endl;};<BR>输出结果是一样的。。<BR>由此得出:<BR>总是先调用其对象成员的构造函数,<BR>再是基类的构造函数,再是本身的构造函数。<BR>再列表中要以逗号分割,成员用成员对象名(非类名!!)<BR>各成员对象的构造函数调用次序由它们在类中声明的次序一致!!(与列表次序无关!!)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Bardo 回复日期:2003-09-26 21:43:37
<br>内容:不好意思,这可是用VB带来的坏病。<BR>总的来说,妻妾优先,然后才是父母,最后是自己。好象符合一些人的生活习惯呀!<BR>非常感谢!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -