C++多态
抽象类
定义
在面向对象的概念中,所有的对象都是通过类来描述的,但是,反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是一个抽象类。
C++中使用纯虚函数的方式来实现抽象类的功能
C++实现抽象类方式
在纯虚函数的后面跟上=0,则这个函数为纯虚函数。包含纯虚函数的类称之为抽象类(接口类),抽象类不能实例化对象因为抽象类中没有具体的方法,所以无法实例化对象,派生类继承之后也不能实例化对象,只有将基类中的抽象类重写了,才能实例化对象。
class A
{
virtual void Func() = 0;
};
int main()
{
A a; //error
}
抽象类多态继承的方式
class A
{
virtual void Func() = 0;
};
class B : public A
{
public:
virtual void Func()
{
cout << "virtual B::Func()" << endl;
}
};
int main()
{
B b;
}
C++11新增特性
override & final
- 当使用override来修饰虚函数时:表修饰派生类虚函数进行强制重写虚函数
class A
{
public:
virtual void Func() = 0;
};
class B : public A
{
public:
virtual void Func() override //表示强制重写虚函数
{
cout << "virtual B::Func()" << endl;
}
};
int main()
{
A *b = new B();
b->Func(); //编译器会首先检测其静态类型是否合法
}
- 当使用final来修饰虚函数时:表示修饰虚函数不可以在被派生类所重写
class A
{
public:
virtual void Func() = 0;
};
class B : public A
{
public:
virtual void Func() final //表示禁止再被重写
{
cout << "virtual B::Func()" << endl;
}
};
class C : public B
{
public:
virtual void Func() //error
{
cout << "virtual C::Func()" << endl;
}
};