尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

c++ --多态(虚函数)

c++ --多态(虚函数) 目录1. 虚函数2.纯虚函数3. 多态的工作原理3.1 这是基类指针指向派生类对象调用函数。3.2 用基类引用来指向派生类对象virtual告诉 C这个函数要支持“运行时多态”调用哪个版本要根据“实际对象类型”决定而不是只看“指针/引用的类型”。1. 虚函数虚函数是基类中的一个函数用virtual关键字声明。通过这种方式派生类可以重写这个函数确保在运行时根据实际对象的类型调用相应的版本。这种机制实现了动态绑定。#include iostream using namespace std; class Base { public: virtual void show() { cout Base class show function called. endl; } }; class Derived : public Base { public: void show() override { cout Derived class show function called. endl; } }; int main() { Base* b new Derived(); b-show(); // 调用派生类的 show() delete b; return 0; }具体解释Base* b: 声明一个指向Base类的指针b。此时b可以用来指向Base类型或任何派生自Base的类型的对象。new Derived(): 创建一个Derived类型的对象并返回指向该对象的指针。new运算符用于动态分配内存。赋值操作: 将Derived对象的指针赋值给b使得b指向这个具体的Derived对象。动态绑定的优势由于b是Base类型的指针但它指向的是Derived对象因此调用b上的虚函数时将会根据Derived的实现来执行。这就是动态绑定的核心优势让代码在运行时更加灵活。2.纯虚函数纯虚函数是在基类中声明的虚函数但没有提供实现。它通过在函数声明后加上 0来标识。这种函数要求派生类必须实现它否则派生类也会变成抽象类不能被实例化。#include iostream using namespace std; class AbstractBase { public: virtual void show() 0; // 纯虚函数 }; class ConcreteDerived : public AbstractBase { public: void show() override { cout ConcreteDerived class show function called. endl; } }; int main() { ConcreteDerived d; d.show(); // 调用具体派生类的 show() // AbstractBase ab; // 错误无法实例化抽象类 return 0; }3. 多态的工作原理C 中的多态确实是通过继承和虚函数实现的。当一个类派生自基类时可以重写基类中的虚函数这样在运行时根据对象的实际类型来调用相应的函数。虚函数: 在基类中声明为virtual的函数允许在派生类中进行重写。基类指针/引用: 可以指向派生类对象调用虚函数时会根据实际对象的类型来决定调用哪个版本的函数。3.1 这是基类指针指向派生类对象调用函数。#include iostream using namespace std; class Base { public: virtual void show() { cout Base class show function called. endl; } }; class Derived : public Base { public: void show() override { cout Derived class show function called. endl; } }; int main() { Base* b; // 基类指针 Derived d; // 派生类对象 b d; // 指向派生类对象 b-show(); // 调用派生类的 show() return 0; }3.2 用基类引用来指向派生类对象#include iostream using namespace std; class Base { public: virtual void show() { cout Base class show function called. endl; } }; class Derived : public Base { public: void show() override { cout Derived class show function called. endl; } }; int main() { Derived d; // 创建派生类对象 Base b d; // 基类引用指向派生类对象 b.show(); // 调用派生类的 show() return 0; }
返回列表