》》》 《类的多态》

多态中的方法重载与上下转型
博客介绍了多态的相关内容,包括方法重载,即方法名相同但个数、类型、次数不同;还阐述了上下转型,向上转型是父类声明对象由子类实例化,向下转型需强制转换,同时提到用 instanceof 关键字判断对象继承关系,存在继承关系返回 true,反之返回 false。

多态 

1.方法重载

总结:

重载:方法名相同,个数,类型,次数不同

例如:

 

 

2.上下转型

向上转型

例如:动物包含狗狗,狗狗不能包含动物

 

父类声明的对象由子类进行实例化

Person类

 

Student类

 

Demo类

 

类的向下转型

 

Person类

 

Doctor类

强制装换

Demo

运行结果

 indtanceof关键字

用indtanceof关键字来判断某一个对象是否继承某一个类

例如:

运行结果

存在继承关系返回true

不存在继承关系返回false

 

转载于:https://www.cnblogs.com/lidar/p/10888445.html

### C++ 继承与多态的使用方法 #### 一、继承的概念 继承是面向对象编程中的核心特性之一,允许创建一个新的(子或派生),该新可以从现有的(父或基)中获取属性和行为。这不仅提高了代码复用率,还增强了程序结构的清晰度。 在C++中,可以通过`public`, `protected`, 和`private`关键字指定继承方式[^3]。例如: ```cpp class Base { protected: int value; public: Base(int v) : value(v) {} void showValue() const { std::cout << "Base Value: " << value << std::endl; } }; class Derived : public Base { public: Derived(int v) : Base(v) {} void modifyValue(int new_val) { value = new_val; } }; ``` 在此示例中,`Derived` 从 `Base` 继承而来,并能够访问其受保护成员 `value`。 --- #### 二、多态的基础 多态是指同一接口可以表示多种型的对象的能力。C++ 支持两种形式的多态:编译时多态(静态多态性)和运行时多态(动态多态性)。 ##### (1)编译时多态 编译时多态通常通过函数重载和运算符重载实现。例如: ```cpp void Swap(int& a, int& b) { int temp = a; a = b; b = temp; } void Swap(double& a, double& b) { double temp = a; a = b; b = temp; } ``` 这里展示了两个不同型的 `Swap` 函数,在编译阶段根据传入参数型选择合适的版本[^4]。 --- ##### (2)运行时多态 运行时多态则依赖于虚函数机制。为了支持动态绑定,需将基中的某些函数声明为虚拟函数(virtual function)。这样即使通过基指针或引用调用这些函数,也会依据实际对象型执行相应的派生版本。 以下是具体实例说明如何利用虚函数达成运行时多态效果[^5]: ```cpp #include <iostream> using namespace std; // 基定义 class Shape { public: virtual float getArea() const = 0; // 纯虚函数使Shape成为抽象 virtual ~Shape() {} // 虚析构函数确保正确释放资源 }; // 圆形派生自形状 class Circle : public Shape { private: float radius; public: Circle(float r) : radius(r) {} float getArea() const override { return 3.14f * radius * radius; } void displayInfo() const { cout << "This is a circle." << endl; } }; // 正方形也派生于形状 class Square : public Shape { private: float sideLength; public: Square(float s) : sideLength(s) {} float getArea() const override { return sideLength * sideLength; } void displayDetails() const { cout << "Square with sides of length " << sideLength << "." << endl; } }; int main() { Shape* shapes[] = {new Circle(7), new Square(5)}; // 动态分配内存给数组元素 for(auto shape : shapes){ cout << "The area is: " << shape->getArea() << endl; // 多态调用 delete shape; // 清理堆上的对象 } return 0; } ``` 此例子中,尽管存储的是 `Shape*` 型指针,但由于存在虚函数表的支持,每次都能准确找到对应的具体实现逻辑并加以应用。 --- ### 总结 综上所述,理解并熟练掌握继承以及多态对于深入学习C++至关重要。它们共同构成了强大的工具集,帮助开发者构建灵活且易于维护的应用软件架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值