3.多态性

1.概述:

  - 多态指同样的消息被不同类型的对象接收时导致不同的行为。

  - 多态的类型:重载多态、强制多态、包含多态、参数多态。

    * 重载多态:通过重载其参数列表实现

    * 强制多态:指将一个变元的类型加以变化,以符合一个函数或操作的要求。

    * 包含多态:类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。

    * 参数多态:模板

  - 多态实现:编译时多态、运行时多态

2.运算符重载

  - 运算符重载规则:

    * 除少数几个外,全部可以重载,并且只能重载C++中已有的运算符(. * :: ?:)

    * 重载之后的运算符的优先级和结合性都不会改变

    * 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原有运算符的操作对象个数,同时至少要有一个操作对象时自定义类型。

  - 重载语法:

    返回类型  operator  运算符(形参表){}

  - 运算符重载为成员函数

  - 运算符重载为非成员函数

3.虚函数:虚函数是动态绑定的基础,必须是非静态成员函数。经过派生之后,在类族中就可以实现运行过程中的多态。

  - 声明语法:virtual  函数类型  函数名(形参表)

  - 虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候

  - 运行中多态的3个条件:

    * 类之间满足赋值兼容规则

    * 声明虚函数

    * 由成员函数来调用或者通过指针、引用来访问虚函数

  - 虚析构函数:解决释放不同类的内存释放问题

4.纯虚函数与抽象类

  抽象类是为了抽象和设计的目的而建立。抽象类是带有纯虚函数的类,为了通过它多态的使用其中的成员函数。无法实例化一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。 

  - 纯虚函数与一般虚函数的原型在书写格式上的不同就在于后面加了“=0”,基类中可以不再给出函数的实现部分。

  - C++的类类型分为两类,多态类型和非多态类型。多态类型指有虚函数的类,非多态指其他。

  - 虚函数:通过虚表实现

  - 重载是方法名相同,参数列表不同;重写是函数声明部分相同,不一样的实现部分,必须要通过继承。

5.参数化多态:将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象

  - 函数模板:template

  - 类模板:使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,返回值或局部变量能取任意类型

时间: 2024-11-04 12:06:46

3.多态性的相关文章

Java 多态性理解

什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法.特别注意:当所引用的类型存在继承关系时候,会结合参数的类型,选择相应的方法.可以结合

java 多态性详解及常见面试题

java多态性 多态分两种: (1)   编译时多态(设计时多态):方法重载. (2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态.(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态) 运行时多态存在的三个必要条件: 一.要有继承(包括接口的实现): 二.要有重写: 三.父类引用指向子类对象. 多态的好处: 1.可替换性(substitutability).多态对已存在代码具有可替换性.例如,多态对圆Circle类工作,对其他任

多态性与虚函数

多态性 多态性是面向对象程序设计的一个重要特征.如果一种语言只支持类而不支持多态,是不能被称为面向对象语言的.只能说是基于对象的,如Ada,VB就属于此类. 在C++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数. 在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法).也就是说,每个对象可以用自己的方式去相应共同的消息.所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的

对象多态性

基本概念的解释. 多态性的依赖条件是方法的覆写!! 观察如下的一个程序: class A{ public void print(){ System.out.println("A--print()") ; } } class B extends A{ public void print(){ System.out.println("B--print()") ; } } public class Test{ public static void main(String

C++多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了"一个接口,多种方法". 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的. 赋值兼容     不过在说虚函数之前,先介绍一个有关

第十三周阅读项目(4):多态性与虚函数

(1)代码: #include <iostream> using namespace std; class Vehicle //交通工具 { public: void run() const { cout << "run a vehicle. "<<endl; } }; class Car: public Vehicle //汽车 { public: void run() const { cout << "run a car.

C++之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种方法”. 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的,也正是今天我们要讲的主要内容. 1.不过在说虚函数之前,我想先介

C++基础(早年笔记)—多态性(一)

多态性(一) 多态性就是不同对象收到相同消息时,产生不同的动作.用一个名字定义不同的函数,这些函数执行不同但又类似的操作,即用同样的接口访问功能不同的函数,实现“一个接口,多种方法”. C++支持的多态性分为编译时多态性和运行时多态性.其中编译时多态性主要通过函数重载和操作符重载来实现,而运行时多态通过继承和虚函数来实现. 2.1虚函数 2.1.1引入派生类后的对象指针 使用: 1 #include<iostream> 2 using namespace std; 3 4 class my_b

一个php多态性的小例子

多态性在 OO 中指 "语言具有以不同方式处理不同类型对象的能力",但 PHP 是弱类型语言,在这一点上就比较弱,仅有 instance of 可以用于判断对象的类型 多态性的优点:让代码更接近生活中的真实情况 一下是一个非常简单的多态性例子,描述在电脑上安装不同操作系统,linux, OS X, windows 和 computer 是两种不同类型的对象. interface os{ function name(); function creator(); } class linux

Java虚拟机 - 多态性实现机制

[深入Java虚拟机]之五:多态性实现机制--静态分派与动态分派 方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址.这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析.这在前面的"Java内存区域与内存溢出"一文中有提到. 静态解