c++ 基类中 成员函数 调用基类的虚函数

taiyang902 2009-03-25 11:41:04
class A
{
public:
virtual void func();


void timerEvent(); //定时器函数,这个函数在对象产生后被调用
}

void A::timerEvent()
{
func;
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//这个时候希望定时器函数调用的是B类的func()函数
}

请问如何实现?



...全文
853 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
taiyang902 2009-04-08
  • 打赏
  • 举报
回复
多谢兄弟们的热情,问题解决了,其实本来没有问题,想的复杂了,问题出来了
hylove9494 2009-03-26
  • 打赏
  • 举报
回复
成员名限定
pengzhixi 2009-03-26
  • 打赏
  • 举报
回复
直接b.fun()就是了
fibbery 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 taiyang902 的回复:]
class A
{
public:
virtual void func();
}

void A::timerEvent()
{
func;
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//这个时候A类的构造函数被调用了,A对象存在了,系统自动触发了A类的timerEvent()函数,从而触发func()函数,
//这个时候我希望调用的是B类的func()函数
}

请问如何实现?
[/Quote]

在基类中调用虚函数,不能够实现多态。
请看我的帖子:http://topic.csdn.net/u/20090317/10/5a4630a6-23a5-48ee-958e-05b38b223daf.html
请看其中我的说明:36楼和54楼
taiyang902 2009-03-25
  • 打赏
  • 举报
回复
class A
{
public:
virtual void func();
}

void A::timerEvent()
{
func;
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//这个时候A类的构造函数被调用了,A对象存在了,系统自动触发了A类的timerEvent()函数,从而触发func()函数,
//这个时候我希望调用的是B类的func()函数
}

请问如何实现?
lzr4304061988012 2009-03-25
  • 打赏
  • 举报
回复
定时器函数是私有的?那还怎么继承。
chin_chen 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 taiyang902 的回复:]
实在不好意思,我没有把问题说明白

class A
{
public:
virtual void func();

privata:
void timerEvent(); //定时器函数,这个函数在对象产生后被调用
}

void A::timerEvent()
{
func();
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//timerEvent()函数是系统调用的,子类能调用。
}
[/Quote]
什么意思,还没看懂。
taiyang902 2009-03-25
  • 打赏
  • 举报
回复
实在不好意思,我没有把问题说明白

class A
{
public:
virtual void func();

privata:
void timerEvent(); //定时器函数,这个函数在对象产生后被调用
}

void A::timerEvent()
{
func();
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//timerEvent()函数是系统调用的,子类能调用。
}
fibbery 2009-03-25
  • 打赏
  • 举报
回复
b.timerEvent();

直接调用就可以了,此时虚拟函数指针,指向的是B的虚拟函数表。
lzr4304061988012 2009-03-25
  • 打赏
  • 举报
回复

因为B累继承了A的timerEvent,而这个函数 实际是
void A::timerEvent()
{
this->func();
}
当用b去调用时this是B*所以调用的是B类的func().

JF
  • 打赏
  • 举报
回复
b.timerEvent();
调用虚函数func,其实是B类的
chin_chen 2009-03-25
  • 打赏
  • 举报
回复
class A
{
public:
virtual void func();


void timerEvent(); //定时器函数,这个函数在对象产生后被调用
}

void A::timerEvent()
{
func;
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
b.timerEvent();//直接调用了啊,
}
feng4206yu 2009-03-25
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class A
{
public:
virtual void func(){cout<<"A::func()";}


void timerEvent(); //定时器函数,这个函数在对象产生后被调用
};

void A::timerEvent()
{
cout<<"A::timerEvent()"<<endl;
this->func(); //...
}
class B : public A
{

public:
virtual void func(){cout<<"B::func()";}

};


int main()
{
B b;
b.timerEvent();
//这个时候希望定时器函数调用的是B类的func()函数
return 0;
}
//输出:A::timerEvent()
// B::func()
liumingrong 2009-03-25
  • 打赏
  • 举报
回复
timerEvent函数中调用虚函数fun就可以了
yangf1983 2009-03-25
  • 打赏
  • 举报
回复
UP
liaoweixiaoyu 2009-03-25
  • 打赏
  • 举报
回复
直接调用b的定时器函数
hmt.sysfixer.net 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 taiyang902 的回复:]
class A
{
public:
virtual void func();
}

void A::timerEvent()
{
func;
}
class B : public A
{

public:
virtual void func();
}

int main()
{
B b;
//这个时候A类的构造函数被调用了,A对象存在了,系统自动触发了A类的timerEvent()函数,从而触发func()函数,
//这个时候我希望调用的是B类的func()函数
}

请问如何实现?
[/Quote]
可以这样解决,lz可以看下:
lz说的是多线程的情况,可以控制住B b; 执行完毕,然后再执行timerEvent()函数,
也就是说用线程同步机制实现,举个例子:


int main()
{
SetEvent();
B b;
//这个时候A类的构造函数被调用了,A对象存在了,系统自动触发了A类的timerEvent()函数,从而触发func()函数,
//这个时候我希望调用的是B类的func()函数
ResetEvent();
}


具体语法lz可以查下,事件内核对象,可以实现lz的要求。
bbb332 2009-03-25
  • 打赏
  • 举报
回复
???直接用不就可以吗??
jakqigle 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feng4206yu 的回复:]
C/C++ code
#include <iostream>
using namespace std;
class A
{
public:
virtual void func(){cout<<"A::func()";}


void timerEvent(); //定时器函数,这个函数在对象产生后被调用
};

void A::timerEvent()
{
cout<<"A::timerEvent()"<<endl;
this->func(); //...
}
class B : public A
{

public:
virtual void func(){cout<<"B::fun…
[/Quote]

这个...还不可以吗?
fairchild811 2009-03-25
  • 打赏
  • 举报
回复
不能实现吧。
加载更多回复(5)

65,211

社区成员

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

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