关于多态

什么是多态?

小猫、小狗、小兔是都是动物的一种形态;

男人、女人,老人,中年人,年轻人,学生,儿童,婴儿都是人类的一种形态;


在java中,多态指的是 父类的引用指向子类的对象!常见的方法有:子父类间的-重写和同一类中的-重载。



### C++ 中的多态示例 #### 示例 1:基于虚函数的动态多态 下面是一个完整的 C++ 示例,展示了如何利用虚函数实现动态多态: ```cpp #include <iostream> using namespace std; // 基类 Animal class Animal { public: virtual void sound() { // 虚函数 cout << "This is an animal." << endl; } }; // 派生类 Dog class Dog : public Animal { public: void sound() override { // 重写基类的虚函数 cout << "Dog says: Woof!" << endl; } }; // 派生类 Cat class Cat : public Animal { public: void sound() override { // 重写基类的虚函数 cout << "Cat says: Meow!" << endl; } }; // 函数接受基类引用作为参数 void makeSound(Animal& animal) { animal.sound(); // 根据实际对象类型调用对应的虚函数 } int main() { Dog d; Cat c; makeSound(d); // 输出 "Dog says: Woof!" makeSound(c); // 输出 "Cat says: Meow!" return 0; } ``` 此代码展示了一个典型的动态多态场景。`makeSound` 函数接收 `Animal` 类型的引用,但在运行时会根据实际对象类型调用相应的 `sound()` 方法[^1]。 --- #### 示例 2:静态多态(函数重载) 以下是静态多态的一个简单例子,涉及函数重载: ```cpp #include <iostream> using namespace std; // 不同类型的参数触发不同版本的函数 void display(int value) { cout << "Integer Value: " << value << endl; } void display(double value) { cout << "Double Value: " << value << endl; } int main() { display(42); // 调用整数版本 display(3.14); // 调用双精度浮点数版本 return 0; } ``` 在这个例子中,编译器会在编译阶段决定调用哪个具体的 `display` 函数,这属于静态多态的一部分[^3]。 --- #### Python 中的多态示例 尽管问题是针对 C++ 的,但为了对比说明,提供一个简单的 Python 多态示例: ```python # 定义基类 class Bird: def fly(self): print("Bird can fly.") # 定义派生类 class Sparrow(Bird): def fly(self): print("Sparrow flies low.") class Eagle(Bird): def fly(self): print("Eagle soars high.") def bird_fly(bird_obj): bird_obj.fly() sparrow = Sparrow() eagle = Eagle() bird_fly(sparrow) # 输出 "Sparrow flies low." bird_fly(eagle) # 输出 "Eagle soars high." ``` 这段代码演示了 Python 如何通过继承和方法覆盖来实现多态行为[^4]。 --- ### 关键知识点总结 - **动态多态**依赖于虚函数机制,在运行时确定具体调用的方法。 - **静态多态**通常由函数重载或运算符重载实现,其绑定发生在编译期间。 - 多态的核心在于“父类引用/指针指向子类对象”,并通过调用被重写的成员函数展现差异化的功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值