鱼C论坛

 找回密码
 立即注册
查看: 1586|回复: 1

多态性

[复制链接]
发表于 2023-6-9 10:41:52 | 显示全部楼层 |阅读模式
2鱼币
帮忙讲一下可以吗谢谢谢谢

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 11:11:47 | 显示全部楼层
在C++中,多态性是面向对象编程的一种重要特性,它允许你使用一个统一的接口来处理不同的对象,而这些对象可以选择以自己的方式响应这些接口的调用。

C++提供了两种类型的多态性:编译时多态性(静态)和运行时多态性(动态)。

1. 编译时多态性: 是通过函数重载和运算符重载实现的。这是在编译时决定的,因为在编译时函数调用已经被解析了。

   函数重载示例:
   
  
  1.    void print(int i) {
  2.        cout << " Here is int " << i << endl;
  3.    }
  4.    void print(double f) {
  5.        cout << " Here is float " << f << endl;
  6.    }
  7.    
复制代码


2. 运行时多态性: 是通过虚函数和继承实现的。这是在运行时决定的,因为在运行时才知道是哪个类的函数被调用。

   虚函数示例:
   
  
  1.    class Base {
  2.    public:
  3.       virtual void print() {
  4.          cout << "print base class" << endl;
  5.       }
  6.       
  7.       void show() {
  8.          cout << "show base class" << endl;
  9.       }
  10.    };
  11.    
  12.    class Derived:public Base {
  13.    public:
  14.       void print() {
  15.          cout << "print derived class" << endl;
  16.       }
  17.       
  18.       void show() {
  19.          cout << "show derived class" << endl;
  20.       }
  21.    };
  22.    
  23.    int main()  {   
  24.       Base *baseptr;
  25.       Derived derivedobj;
  26.       baseptr = &derivedobj;
  27.       
  28.       //virtual function, binded at runtime (Runtime polymorphism)
  29.       baseptr->print();
  30.       
  31.       // Non-virtual function, binded at compile time
  32.       baseptr->show();
  33.    
  34.       return 0;
  35.    }
  36.    
复制代码


在这个例子中, print() 函数是虚函数,所以它在运行时解析,打印出"print derived class"。 show() 函数不是虚函数,所以它在编译时解析,打印出"show base class"。

总的来说,多态性是一种强大的工具,它允许你编写更通用、可重用的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 03:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表