求教一个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)

请高手解决一下........
...全文
345 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 ;
};

};
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-15 03:37
社区公告
暂无公告