求教一个C++中虚数问题. c++高手请进......

jin_hua 2005-03-15 03:37:13
请看下面的代码:
#include <iostream.h>

class a
{
public :
virtual void good() ;

};

class b :public a
{
public :
void good()
{
cout<<"this is b"<<endl ;
};

};
/*
class c:public b
{
public :
void good()
{
cout<<"this good :"<<endl ;
};
};
*/

void main()
{
b *cc ;
cc = new b;
cc->good() ;
delete cc ;
return ;
};

为何编译通过,但运行时却出现以下错误:
Linking...
text2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall a::good(void)" (?good@a@@UAEXXZ)
Debug/text1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

text1.exe - 2 error(s), 0 warning(s)

请高手解决一下........
...全文
510 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jin_hua 2005-03-16
  • 打赏
  • 举报
回复
to bobob(静思--潜心研究PDF)
你的意思是虚函数一定要定义实体吗, 那我就觉得这虚函数除了前面加了一个virtual ,与一般函数
没什么区别了,
我现在不明白为什么一定要定义在父类的虚函数中加入函数实体 或者 定义为纯虚函数该程序才可运行...

请高手们讲解啊..........
hushuangyan74 2005-03-15
  • 打赏
  • 举报
回复
楼上几位讲得很清楚了。。。
bobob 2005-03-15
  • 打赏
  • 举报
回复
虚函数是父类定义的方法,本身已经实现,但是你可以重载它,来实现你自己的功能.同时你也可以不重载,直接使用父类的

纯虚函数是子类必须实现的一个方法,相当于父类只留了一个接口
linuxpgy 2005-03-15
  • 打赏
  • 举报
回复
关于虚函数的问题我已很久没接触了
不过我隐约记得
通过指针调用和通过实例调用是不同的
cc = new b;
cc->good() ;

b cc;
cc.good();
是不同的。(也许我记错了 :))
rabi_ 2005-03-15
  • 打赏
  • 举报
回复
我也不懂,来凑个热闹

virtual void good() ;

提个问题,这个算声明而已吧,不算定义,对不对啊?
jin_hua 2005-03-15
  • 打赏
  • 举报
回复
回复楼上:

俺就是不明白,为何一定要声明为纯虚数才可以 .
定义成虚函数 ,然后在派生类中定义实体为何不行啊.

且为的指针指向的也是派生类啊.

请高手们帮小弟解答一下...
sycnick 2005-03-15
  • 打赏
  • 举报
回复
把 class a 的 定义 改成 这样就行了
class a
{
public :
// virtual void good();

};


.........:)
qhfu 2005-03-15
  • 打赏
  • 举报
回复
把 class a 的 定义 改成 这样就行了
class a
{
public :
virtual void good() = 0;

};
wuzhouqun 2005-03-15
  • 打赏
  • 举报
回复
没有实现a::good的实现。

class a
{
public :
virtual void good() ;

};
改成
class a
{
public :
virtual void good() ;
{
cout<<"this is a"<<endl ;
};

};

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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