虚函数:
表现形式:
virtual return_type function_name(parameter){},与普通成员函数相比多了一个virtual关键词。
注意:子类中如果有对基类虚函数进行覆盖定义,无论该覆盖是否有virtual关键字,都是虚函数。
主要作用:
实现多态机制,表现如下:
class Father
{
public:
virtual void Introduce(void)
{
//Father‘s Content
}
}
class Son:public Father
{
void Introduce(void)
{
//Son‘s Content
}
}
void main()
{
Son son1;
Father *pFather;
pFather = &son1;
pFather->Introduce();//调用Son的Introduce函数
}
纯虚函数:
表现形式:
virtual void Eat() = 0;
主要作用:
为子类提供接口管理和约束。
class Animal
{
public:
virtual void Eat() = 0;
}
class Dog:public Animal
{
public:
void Eat()
{
//Dog's Content;
}
}
class Cat:public Animal
{
public:
void Eat()
{
//Cat's Content;
}
}
重写(覆盖)和隐藏的区别:
函数的覆盖发生在派生类和基类之间,两个函数必须完全相同,而且是虚函数。
不属于这种情况的就是函数的隐藏。
应用:
当发生隐藏时,如果在子类的同名函数想要调用基类的被隐藏函数,可以使用基类名::函数名(参数)的形式。