抽象基类函数调用派生类函数
class a
{
public:
virtual void run();
void time();
};
a类定义了run()和time()
void a::time()
{
void run();
}
class b:public a
{
public:
void run();
};
提示tim()函数没找到run()函数
为什么?
问题点数:100、回复次数:8Top
1 楼jeckyz(深圳)回复于 2003-11-02 18:08:47 得分 10
你是怎么调用的?是这样用吗?
a* a1 = new b( );
a1.time( );
原格上说 class b 应该这样:
class b : public a
{
public:
using a::time( );
virtual void run( );
};
希望你用的编译器支持 using 引用 :)Top
2 楼maoloverme1(峁峁)回复于 2003-11-02 18:11:45 得分 0
此时需对run函数重写,否则就要删除b类中的void run()Top
3 楼yizhili(梨子)回复于 2003-11-02 18:21:49 得分 40
拜托,time里的是run的申明,用得着吗?
#include <iostream>
using namespace std;
class a
{
public:
virtual void run(){cout<<"a::run"<<endl;}
void time();
};
void a::time()
{
void run();
run();
}
class b:public a
{
public:
void run(){cout<<"b::run"<<endl;}
};
void run()
{
cout<<"::run()"<<endl;
}
void main(void)
{
a * acls = new b;
acls->run();
acls->time();
}
输出:
b::run
::run()
看出来了没?
a::time中申明的是全局的run,去掉就对了Top
4 楼seril(ser)回复于 2003-11-02 18:49:34 得分 0
a类的run()函数不定义行吗?Top
5 楼seril(ser)回复于 2003-11-02 19:08:28 得分 0
大哥写错了,
改过来还是不行
帮帮忙
Top
6 楼seril(ser)回复于 2003-11-02 20:13:54 得分 0
time()函数是一个全局函数
Top
7 楼plainsong(短歌)()回复于 2003-11-02 20:49:15 得分 10
调用时多了一个void,函数调用变成了函数声明。去掉就行了。Top
8 楼qkc(sdf)回复于 2003-11-02 21:42:56 得分 40
回复人: seril(ser) ( ) 信誉:100 2003-11-02 20:13:00 得分:0
time()函数是一个全局函数
答:
time应该是基类或是派生类的成员函数,否则没办法调用run()啊因为是虚函数,它不知道要调哪一个run()Top




