虚函数的一个简单的例子。 class A { protect: virtual void test(); }; void A::test() { printf("this is class A"); } class B::A { protect: virtual void test(); }; void B::test() { printf("this is class B"); } void main() { A a; B b; b.test(); } output: this is class B
class CParent
{
protect:
virtual void TestVirtual();//这是个虚函数。
};
void CParent::TestVirtual()//这个函数可有可没有,视需要而定。
{
}
//子类
class CChild
{
protect:
virtual void TestVirtual();//表示在此子类中重载这个虚函数。
};
void CChild::TestVirtual()//这是重载函数的定义。
{
CParent::TestVirtual();//调用父类的该函数,你也可以不调用它。
//若调用,则要求父类中已重载该函数,否则编译出错。
}
对C++中虚函数、纯虚函数在多态中作用的一点认识
virtual void TestVirtual();//表示在此子类中重载这个虚函数。
};
前面的virtual不要吧!!
class A
{
protect:
virtual void test();
};
void A::test()
{
printf("this is class A");
}
class B::A
{
protect:
virtual void test();
};
void B::test()
{
printf("this is class B");
}
void main()
{
A a;
B b;
b.test();
}
output:
this is class B
里面有动作"按"
属性开和关.有两个继承于它的子类"电灯开关"和"日光灯开关"class CSwitch
{
public:
virtual void push()=0;//如果你需要让此函数执行功能, 去掉=0.并实现代码.
}class CSubSwitch1
{
public:
virtual void push()//virtual 可有可无, 如此类还要做为父类就最好用virtual
{
打开电灯;
}
}class CSubSwitch2
{
public:
virtual void push()//virtual 可有可无.
{
打开日光灯;
}
}void main()
{
CSwitch *sw1=new CSubSwitch1;
CSwitch *sw2=new CSubSwitch2:
sw1->push();//执行打开电灯的动作;
sw2->push();//执行打开日光灯的动作;
//sw1,sw2都是CSwitch类的指针, 而执行的动作取决于实现的类.}
一个画图程序:
CMyObject:(基类)定义一个虚函数virtual void Draw();
CLine:(由CMyObject派生)重载void Draw();
CCircle:(由CMyObject派生) 重载void Draw();这样,你可以用CMyObject类型的变量直接指向派生类的Draw();如CMyObject* pObj;
pObj = .....(赋值,让它指向一个已存在的图形实例)此时pObj->Draw()会根据pObj的实际类型调用合适的Draw函数,画直线,或画圆。。
2.父类中声明了纯虚函数(即,形如 virtual FunctionTYPE MyFunc() = 0; )的,派生类中
必须重载.