讨论:C++中虚函数是何意?
常说虚函数,但是现在我还不了解什么是虚函数,怎么直观地表白?它和常用的函数有何本质的区别? 问题点数:20、回复次数:9Top
1 楼gaohengwei()回复于 2002-11-25 19:29:38 得分 0
简单的说虚函数没有真正意义的函数实体,等待自类来重载实现多种功能,你可以找找这方面的资料看看Top
2 楼rivershan(阿门)回复于 2002-11-25 19:51:09 得分 5
去看书~
主要用途我想是为了动态识别吧~
说大一点是为了符合面向对象~Top
3 楼xsc2001(程序人生)回复于 2002-11-25 20:11:05 得分 5
虚函数实际上就是没有定义其具体实现过程且可重载的成员函数,通过重载可实现其具体的功能!Top
4 楼cbc(逍遥子)回复于 2002-11-25 20:20:04 得分 5
实现动态连编,即执行哪个函数不是编译时就决定的,而是运行时才绑定的.
for example:
比如你想定以几个类来表现狗和猫的行为,它们都会叫,但是叫声不同(猫为喵喵,狗为汪汪),你就定义一个基类:
class Animal
{
public:
virtual void voice();
};
class Dog
{
public:
void voice(){//定义狗的行为}
};
class Cat
{
public:
void voice(){//定义猫的行为}
};
这样的话当你这样用的时候:
Dog d;
Cat c;
Animal * pa;
pa=&d;
pa->voice();//调用Dog::voice()
pa=&c;
pa->voice();//调用Cat::voice()
你可以通过调用同一个函数而视指针所指对象的不同而调用不同版本的函数。
Top
5 楼riverboat(诸葛不亮)回复于 2002-11-25 20:26:47 得分 5
主要是为了能通过基类的指针调用派生类的同名函数(方法):
class Base{
Base(){}
~Base(){}
virtual void DeclareIt(){AfxMessageBox("I am in Class Base");}
}
class Derived : public Base {
Derived(){}
~Derived(){}
virtual void DeclareIt(){AfxMessageBox("I am in Class Derived");}
}
void DoSomething(Base* p){
p->DeclareIt();
}
main(){
Base a;
Derived b;
DoSomething(&a); // 调用Base的DeclareIt()
DoSomething(&b); // 调用Derived的DeclareIt()
Base* p[2];
p[0] = new Base;
p[1] = new Derived;
for(int i=0; i<2; i++){
p[i]->DeclareIt(); // i=0时将调用Base::DeclareIt, i=1 调用 Derived::DeclareIt
}
}Top
6 楼arcnode(小二哥)回复于 2002-11-25 20:31:16 得分 0
容易啊
Top
7 楼arcnode(小二哥)回复于 2002-11-25 20:31:25 得分 0
测试程序
Top
8 楼arcnode(小二哥)回复于 2002-11-25 20:31:35 得分 0
sorry,我测试
Top
9 楼jluhs()回复于 2002-11-28 19:08:46 得分 0
我看书上说:虚函数主要实现动态晚绑定,还有就是说不根据调用函数的指针类型来调用函数,还是很迷糊。我想知道,虚函数一般都在什么场合下使用呢?是不是对虚函数的使用没有什么限制(只要能实现功能,且性能稳定)?Top




