⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_27735.htm

📁 vc
💻 HTM
字号:
<p>
序号:27735 发表者:loverain 发表日期:2003-01-14 19:19:01
<br>主题:不好意思,问题如下:谢谢以上各位的热心帮忙!麻烦再看一下!!
<br>内容:class&nbsp;&nbsp;father<BR>{<BR>&nbsp;&nbsp;static father * CreateObj();<BR>};<BR>class son : public father<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;int *handle;<BR>};<BR>son::son()<BR>{handle = new int;}为什么如此father * father::CreateObj()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;father *p = new son;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return p;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>这样总是不对??总是在执行时提示:warn-&gt; base class not iniatialized<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-01-14 21:16:34
<br>内容:如下代码,没有你的错误提示,怎么回事?<BR><BR>#include &lt;iostream.h&gt;<BR>class&nbsp;&nbsp;father<BR>{<BR>public:<BR>&nbsp;&nbsp;static father * CreateObj();<BR>};<BR><BR>class son : public father<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;son() {handle = new int;};<BR>&nbsp;&nbsp;&nbsp;&nbsp;~son() {delete handle;};<BR>//protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;int *handle;<BR>};<BR>father * father::CreateObj()<BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;father *p = new son;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return p;<BR>}<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;father* p = father::CreateObj();<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; ((son*)p)-&gt;handle;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete p;<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>
回复者:golden wings 回复日期:2003-01-14 21:23:16
<br>内容:这是编译器在警告你,<BR>当你在&nbsp;&nbsp;father *p = new son; 时<BR>p所指的son的实例中包含一个father类的实例(father是son的基类),因为你没有提供father类的构造函数,编译器虽然会给你生成一个,但它什么也不做,因此你的father类的成员变量会无法初始化(如果有的话,当然你这没有),它们的取值是不确定的,编译器希望引起你的注意。<BR>"base class not iniatialized"的意思是“基类没有初始化”,它只是一个警告,不是错误。
<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>回复者:在水一方 回复日期:2003-01-14 21:31:50
<br>内容:你在class son的声明中掉了其构造函数的声明<BR>&nbsp;&nbsp;&nbsp;&nbsp; son();<BR>俺在VC6.0中如下通过:<BR><BR>#include &lt;iostream.h&gt;<BR><BR>class CFather<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int value;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static CFather *CreateObject();<BR>};<BR><BR>class CSon : public CFather<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int *m_p;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSon();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~CSon();<BR>};<BR><BR>CFather *CFather::CreateObject()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (new CSon);<BR>}<BR><BR>CSon::CSon()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_p = new int;<BR>}<BR><BR><BR>CSon::~CSon()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete m_p;<BR>}<BR><BR><BR><BR>int main(int argc, char* argv[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFather *p;<BR>&nbsp;&nbsp;&nbsp;&nbsp;p = CFather::CreateObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;value = 355;<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;p-&gt;value&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete p;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<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>
回复者:芝麻不开门 回复日期:2003-01-15 23:27:19
<br>内容:楼上的大虾,关于p俺有个问题:<BR>在你的main函数中,p是作为CFather类型的指针定义的。可运行p=CFather::CreateObject()之后返回的是CSon类型的指针,p就应该指向一个CSon对象。这样的话就应该有p-&gt;m_p这个数据成员。<BR>可事实并非如此,p指向的对象始终只有一个数据成员value,也就是说p并没有被转成CSon指针。你能解释一下吗??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:IceAge 回复日期:2003-01-16 00:27:41
<br>内容:尽管 (new CSon), CFather::CreateObject()之后返回的是CFather, 而不是CSon, 因为:<BR>&nbsp;&nbsp; -------- CFather * --------&nbsp;&nbsp; CFather::CreateObject()<BR><BR>你可以这样:<BR><BR>&nbsp;&nbsp; CSon* p = (CSon*) CFather::CreateObject();&nbsp;&nbsp; --- 告诉编译器你知道这是CSon*
<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 + -