常说虚函数,但是现在我还不了解什么是虚函数,怎么直观地表白?它和常用的函数有何本质的区别?
解决方案 »
- directshow怎么控制摄像头快门(曝光时间),进来都有分。
- 为什么Yahoo的openCV讨论组进不去了
- VC++怎么生成应用程序?单独一个EXE不需要带其他文件,我初学者
- 我操,在Google中搜索邓小平总是找不网页,是什么原因,他妈的故意的吗???!!
- 关于CRecordSet中的Open
- 预览的时候显示的是汉字,可是在打印的时候却是乱码,怎么回事啊
- 变量定义问题?
- 兄弟有几个问题,请教各位高手:
- 请教:俩个函数之间怎么实现局部变量共用,比如:fun1()中的{int a ;a++ ;}现在要让fun2(){//对a进行操作,变量值要用fun1()中变化后的值},这该怎么办呢,我不想用全局变量!
- 请教,在c语言中什么是断言,它的作用是什么?
- 郁闷,高手快来帮忙!(在线)
- 随便问问:大家学VC的时候都看些什么书啊?做了多少练习程序?送分啦!!
比如你想定以几个类来表现狗和猫的行为,它们都会叫,但是叫声不同(猫为喵喵,狗为汪汪),你就定义一个基类:
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()
你可以通过调用同一个函数而视指针所指对象的不同而调用不同版本的函数。
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
}
}