c++中如何实现多态_c++多态实现方法

C++中多态分为运行时和编译时两种,运行时多态通过虚函数和继承实现,由基类指针或引用在运行时调用派生类重写函数,如Animal基类的speak()被Dog和Cat类重写,通过new创建对象并调用对应版本;纯虚函数用于定义抽象基类,强制派生类实现特定接口,如Shape类的area();编译时多态通过函数重载和模板实现,函数调用在编译期确定,如print函数重载不同类型,模板函数max为不同类型生成独立实例,静态多态效率高但需类型明确,动态多态灵活但有虚函数表开销,应根据需求选择。

c++中如何实现多态_c++多态实现方法

在C++中,多态是面向对象编程的核心特性之一,它允许同一接口调用不同对象的特定实现。多态主要通过虚函数继承机制来实现,分为编译时多态和运行时多态。

运行时多态(动态多态)

运行时多态是C++中最常见的多态形式,依赖于基类指针或引用调用虚函数,在程序运行时确定具体调用哪个派生类的函数。

实现步骤:

  • 在基类中声明虚函数(使用 virtual 关键字)
  • 派生类重写(override)该虚函数
  • 通过基类指针或引用指向派生类对象并调用函数

示例代码:

立即学习C++免费学习笔记(深入)”;

 #include <iostream> using namespace std; <p>class Animal { public: virtual void speak() { cout << "Animal speaks" << endl; } };</p><p>class Dog : public Animal { public: void speak() override { cout << "Dog barks" << endl; } };</p><p>class Cat : public Animal { public: void speak() override { cout << "Cat meows" << endl; } };</p><p>int main() { Animal<em> a1 = new Dog(); Animal</em> a2 = new Cat();</p><pre class='brush:php;toolbar:false;'>a1->speak(); // 输出: Dog barks a2->speak(); // 输出: Cat meows  delete a1; delete a2; return 0;

}

在这个例子中,speak() 是虚函数,调用哪个版本由实际对象类型决定,而不是指针类型。

纯虚函数与抽象基类

如果希望基类中的函数没有默认实现,强制派生类提供自己的实现,可以使用纯虚函数

语法:
virtual 返回类型 函数名() = 0;

c++中如何实现多态_c++多态实现方法

ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

c++中如何实现多态_c++多态实现方法116

查看详情 c++中如何实现多态_c++多态实现方法

包含纯虚函数的类称为抽象类,不能实例化。

示例:

 class Shape { public:     virtual double area() = 0; // 纯虚函数 }; <p>class Circle : public Shape { double radius; public: Circle(double r) : radius(r) {} double area() override { return 3.14159 <em> radius </em> radius; } };</p>

编译时多态(静态多态)

编译时多态主要通过函数重载模板实现,调用哪个函数在编译阶段就已确定。

函数重载示例:

 void print(int x) { cout << "Integer: " << x << endl; } void print(double x) { cout << "Double: " << x << endl; } void print(string x) { cout << "String: " << x << endl; } 

模板实现泛型多态:

 template<typename T> T max(T a, T b) {     return (a > b) ? a & b; } 

模板在编译时为每种类型生成对应的函数版本,属于静态多态。

基本上就这些。运行时多态靠虚函数表和指针实现,灵活但有轻微性能开销;编译时多态效率高,但需要类型在编译期明确。根据需求选择合适方式即可。

ai c++ ios 面向对象编程 speak print 面向对象 多态 引用调用 指针 继承 虚函数 纯虚函数 接口 指针类型 函数重载 泛型 对象

上一篇
下一篇