更新:2025-02-14 17:30:45|关注1 人
在C++中,多态性(Polymorphism)是一种允许将子类对象视为父类对象使用的特性,从而使得同一个函数调用在不同的对象上可能会产生不同的行为。多态性分为编译时多态性和运行时多态性,其中运行时多态性通常通过虚函数(Virtual Function)来实现。
虚函数是实现C++多态的关键机制。当一个函数在基类中被声明为virtual
时,它就成为了虚函数。这意味着,当通过基类的指针或引用来调用这个函数时,会根据实际对象的类型(而不是指针或引用的类型)来决定调用哪个版本的函数。
在基类中,使用virtual
关键字声明一个虚函数。例如:
class Base { public: virtual void show() { cout << "Base class show function" << endl; } };
在派生类中,可以重写(Override)这个虚函数:
class Derived : public Base { public: void show() override { // 使用override关键字可以明确表明这是一个重写 cout << "Derived class show function" << endl; } };
然后,可以通过基类指针来调用虚函数,实现多态性:
Base* basePtr; Derived derivedObj; basePtr = &derivedObj; basePtr->show(); // 输出:Derived class show function
在这个例子中,尽管basePtr
是指向Base
类的指针,但由于show
函数是虚函数,且basePtr
实际上指向的是Derived
类的对象,因此调用的是Derived
类中的show
函数。
如果一个类中包含纯虚函数(Pure Virtual Function),那么这个类就是抽象类(Abstract Class)。纯虚函数的声明是在函数声明的末尾加上= 0
。例如:
class AbstractBase { public: virtual void pureVirtualFunction() = 0; // 纯虚函数 };
抽象类不能实例化,通常用作基类,要求派生类必须实现所有的纯虚函数。例如:
class ConcreteDerived : public AbstractBase { public: void pureVirtualFunction() override { cout << "ConcreteDerived class pureVirtualFunction implementation" << endl; } };
在这个例子中,ConcreteDerived
类必须实现pureVirtualFunction
函数,否则它自身也会成为一个抽象类,不能实例化。
代码可重用性:通过多态性,可以使用基类指针或引用来操作不同的派生类对象,从而编写更加通用的代码。
接口定义:多态性允许定义统一的接口,不同的派生类可以提供不同的实现。
扩展性:在添加新的派生类时,不需要修改使用基类指针或引用的现有代码。
虚函数有一个小小的性能开销,因为运行时需要查找虚函数表(Virtual Table)来确定要调用的函数。
如果一个类中有虚函数,那么该类就会有一个虚函数表指针(通常称为vptr),这会增加对象的大小。
构造函数不能是虚函数,因为构造对象时,对象的类型必须是已知的。
析构函数通常是虚函数,特别是当类被用作多态基类时,以确保正确的对象析构。
声明:以上是华未云整理的全部内容。本站资源来自及互联网公开收集,仅限学习交流使用,请遵循相关法律法规,如有侵权争议、不妥之处请联系本站删除处理!