·我们都知道,虚函数是类的多态的关键步骤,常用的在多态的实现都是子类的虚函数和基类的虚函数函数名,返回值,参数一致。
但是凡事总有例外:
关于多态有两个例外:
1.协变
class a
{
};
class b: public a
{
};
class A
{
public:
virtual a*f()
{
return new a;
}
};
class B :public A
{
public:
virtual b*f()
{
return new b;
}
};
在上面代码中,f()虚函数返回值的类型不一样,这就是协变,值得注意的是,在基类和子类虚函数返回值不同时,不一定返回基类和子类本身的解引用,还可以返回另外的需要的类的引用,这里值得注意的是,子类和基类函数返回值无论是不是本身,但两个返回值一定要是互为父类和子类的。
2.也就是析构函数,当类中开辟了空间,程序结束时,需要析构函数,那么由于析构函数的函数名是他们类的本身,所以要使用虚函数来修饰析构函数,因此函数名不同。

本文探讨了C++中虚函数与多态性的两个特殊例外情况:协变与析构函数。协变允许子类的虚函数返回类型不同于基类,只要两者存在继承关系。而析构函数作为虚函数,其名称与基类不同,用于资源清理。
1097

被折叠的 条评论
为什么被折叠?



