软件工程多态性是指(多态性的程序设计多态性)

本文目录
多态性的程序设计多态性
“多态性”一词最早用于生物学,指同一种族的生物体具有不同的特性。在面向对象的程序设计理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态是面向对象程序设计的重要特征之一,是扩展性在“继承”之后的又一重大表现 。对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可能导致完全不同的行为,这种现象称为多态性。
多态性包含编译时的多态性、运行时的多态性两大类。 即:多态性也分静态多态性和动态多态性两种。 动态多态性是指定义在一个类层次的不同类中的重载函数,它们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。
在用户不作任何干预的环境下,类的成员函数的行为能根据调用它的对象类型自动作出适应性调整,而且调整是发生在程序运行时,这就是程序的动态多态性。即,发出同样的消息被不同类型的对象接收时,有可能导致完全不同的行为。 多态性就是多种表现形式,具体来说,可以用一个对外接口,多个内在实现方法表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
举例子说明一下: #include 《iostream》std::cout;class A {public:virtual void test() { cout《《aaa《《endl; } //运行时的多态性,如果不加virtual就是编译时的多态//void test() { cout《《aaa《《endl; }//编译时的多态性};class B:public A{public:void test() {cout《《bbb《《endl;}};class C:public B{public:void test() {cout《《ccc《《endl;}};void main(){C cc;A *p=&cc;p-》test();}在Class A的test函数前加上virtual,即在运行时多态的时候,程序输出结果为:ccc
在Class A的test函数前不加virtual,即在编译时多态的时候,程序输出结果为:aaa
C++的多态性:在基类的函数前面加上Virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
多态性是什么
多态是指一个程序中同名的不同方法共存的情况。比如一个源程序文件中,有俩个方法(或函数)add(int a,int b);add(int a,int b,int c);两个方法,方法名相同,功能也差不同,一个求二个数的和,一个求三个数的和。这就是多态。
Public Class A{
public void add(int i,int j) {
System.out.println(i+j)
}
public void add(int i,int j,int k) {
System.out.println(i+j+k)
}
}
java 中的多态机制(包括,重载(同类中存在同名方法)和覆盖(子类存在与父类同名的方法))。
多态的概念是什么
多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
多态的种类:
动态多态(dynamic polymorphism):通过类继承机制和虚函数机制生效于运行期。可以优雅地处理异质对象集合,只要其共同的基类定义了虚函数的接口。也被称为子类型多态(Subtype polymorphism)或包含多态(inclusion polymorphism)。在面向对象程序设计中,这被直接称为多态。
静态多态(static polymorphism):模板也允许将不同的特殊行为和单个泛化记号相关联,由于这种关联处理于编译期而非运行期,因此被称为“静态”。可以用来实现类型安全、运行高效的同质对象集合操作。
以上内容参考:百度百科-多态性
java中多态具体是什么
多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
多态有两种表现形式:重载和覆盖
1、首先说重载(overload),是发生在同一类中,与什么父类子类、继承毫无关系。
标识一个函数除了函数名外,还有函数的参数(个数和类型),也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。
他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!
2、再说覆盖(override),是发生在子类中,也就是说必须有继承的情况下才有覆盖发生。
继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。
这样再调用这个方法的时候,就是执行子类中的过程了,父类中的函数就被覆盖了。
什么是多态性,C++中是如何实现多态的
多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
举个例子:例如ATM机。世界上有非常多的银行,每个银行都有好多种卡。如果ATM需要为每一种卡写一种方法去调用,例如getMoney(CCBCard card),getMoney(BBCard card)就会非常的麻烦。而且维护起来就是灾难性的。因为每时每刻都可能会有新的卡出现。所以我们可以采用多态
getMoney(Card card),所有的银行卡都继承Card这个类。这样就可以避免为每一种卡写一个方法。但是每一种卡的使用方法,作用都不一样,Card如何调用每一种卡不同的内容呢?
这就需要多态。让你看起来像是操作的父类,但是实际的运行内容却是子类的内容。
下面有一段代码,你可以参考一下。
用父类的指针或者引用指向子类对象,来实现多态的作用
class A {
public:
A() {}
virtual void foo() {
cout 《《 "This is A." 《《 endl;
}
};
class B : public A {
public:
B() {}
void foo() {
cout 《《 "This is B." 《《 endl;
}
};
int main(int argc, char* argv) {
A *a = new B();
a-》foo();
if(a != NULL)
delete a;
return 0;
}
这将显示:
This is B.
如果把virtual去掉,将显示:
This is A.
前面的多态实现使用抽象类,并定义了虚方法.
多态性谁来帮我解释一下!
多态性
1.多态性的概念
多态性是指用一个名字定义不同的函数,这函数执行不同但又类似的操作,从而实现“一个接口,多种方法”。
多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也称静态多态性,它是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数实现的。
2.函数重载
函数重载的意义在于他能用同一个名字访问一组相关的函数。
在类中普通成员函数和构造函数都可以重载,特别是构造函数的重载(他提供了多种初使化方式)给用户更大的灵活性。在基类和派生类的函数重载有两种情况:一种是参数有所差别的重载。另一种是参数没有差别的重载,只是他们属于不同的类。
可以用以下两种方法来区分这两种函数:用对象名加以区分;使用“类名::”加以区分。
3.运算符重载称动态多态性,他是通过继承和虚函数实现的。
运算符重载通过创建运算符函数operator@()来实现。运算符函数定义了重载的运算符将要进行的操作,这种操作通常作用在一个类上。这样,在编译时遇到名为operator@的运算符函数(@表示所要重载的运算符),就检查传递给函数的参数的类型。
重载运算符与预定义运算符的使用方法完全相同,它不能改变原有运算符的参数个数(单目或双目),也不能改变原有的优先级的结合性。用户不能定义新的运算符,只能从C++已有的运算符中选择一个恰当的运算符重载。
3.1成员运算符函数
运算符函数可以定义为它将要操作的类的成员(称为成员运算符函数),也可以定义为非类的成员,但是非成员的运算符函数大多是类的友元函数(称为友元运算符函数)。
成员运算符函数在类中的声明格式为:
class X{
//……
type operator@(参数表);
};
其中type为函数的返回类型,@为所要重载的运算符符号,X是重载此运算符的类名,参数表中罗列的是该运算符所需要的操作数。
成员运算符函数定义的形式一般为:
type X::operator@(参数表)
//函数体}
其符号的含义与声明时相同。
在成员运算符函数的参数表中,若运算符是单目的,则参数表为空,此时当前对象作为运算符的一个操作数,通过this指针隐含地传递给函数的;若运算符是双目的,则参数表中有一个操作数,它作为运算符的右操作参数,此时当前对象做为运算符的左操作数,它是this指针隐含地传递给函数的。总之成员运算符函数operator@所需要的一个操作数是由对象通过this指针隐含传递。
3.2友元运算符函数
在C++中可以把运算符函数定义成某个类的友元函数,称为友元运算符函数。
友元运算符函数在类的内部声明格式如下:
friend type operator@(参数表)
定义友元运算符函数格式如下:
type operator@(参数表)
{ //函数体
}
与成员运算符函数不同,友元运算符函数是不属于任何类对象的,它没有this指针。若重载的是双目运算符,则参数表中有两个操作数;若重载的是单目运算符,则参数表中只有一个操作数。 不能用友元函数重载的运算符是=、()、、-〉,其余的运算符都可以使用友元函数来实现重载。
运算符函数调用形式如下表:
运算符函数调用形式
习惯形式 友元运算符函数调用形式 成员运算符函数调用形式
a+b operator(a,b) a.operator+(b)
-a operator-(a) a.operator-()
a++ operator++(a,0) a.operator++(0)
4.赋值运算符
继承C语言,用户自定义的类和结构都要能进行赋值运算。而数组名不能赋值,数组名实质上是一个常量指针。
对于任何类,C++提供了默认的赋值运算符。一般地,默认的赋值运算符重载是能够胜任工作的。当类中有指针类型时,需要自定义赋值运算符函数。一般其函数体包含两部分:
1)与析构函数类似,取消对象已经占有的资源;
2)与构造函数类似,在其中分配新的资源。
类的赋值运算符重载“=”只能重载为成员函数,不能重载为友元函数。
重载后的运算符函数operator=()不能被继承。
拷贝构造函数和赋值运算符重载的区别:声明和定义方式不同;调用方式不同。
5.虚函数
虚函数是重载的另一种表现形式,允许虚函数调用与函数体之间的联系在运行时才建立。
定义:虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数,在派生类中重新定义时,其函数原形包括返回类型,函数名,参数个数与参数类型的顺序,都必须与基类中的原形必须相同。
构造函数不能是虚函数,但析构函数可以是虚函数。
虚函数与重载函数的关系:当普通的函数重载时,其函数的参数或参数类型必须有所不同,函数的返回类型也可不同;在派生类中,重新定义虚函数时要求函数名、返回类型、参数个数、参数的类型和顺序与基类中的函数原形完全相同;若仅仅返回类型不同,其余均相同,系统会给出错误信息。虚函数重载时若仅仅函数名相同,而参数的个数、类型或顺序不同系统将它作为普遍函数重载,虚函数的特征将会丢失。
多重继承与虚函数:多重继承可视为多个单继承的组合。
6.纯虚函数和抽象类
纯虚函数:是一个在基类中说明的虚函数,他在该基类中没有定义,但要求在它的派生类中定义自己的版本,或重新说明为纯虚函数。
纯虚函数的一般形式:virtual type func_name(参数表)=0(type是函数的返回类型,func_name是函数名)。
抽象类:一个类至少有一个纯虚函数的类。抽象类提供了处理各种不同派生类的统一接口,将实现的责任交给了派生类。
所谓多态性是指
多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式。
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。
拓展资料:
多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。
运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。
OC中的多态:不同对象对同一消息的不同响应.子类可以重写父类的方法。
多态就是允许方法重名 参数或返回值可以是父类型传入或返回。
多态也指生物学中腔肠动物的特殊的生活方式。水螅态与水母态的世代交替现象。
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

更多文章:
汇编语言pdf下载(《Windows环境下32位汇编语言程序设计》资料下载)
2026年10月14日 13:40
获取innertext(在js中如何获取input标签的text值)
2026年10月14日 02:00
跨文件vlookup怎么用详细步骤(vlokkup函数怎么用)
2026年10月14日 01:30
伦勃朗老年自画像(《大师经典伦勃朗》封面上的这张图叫什么名字急!)
2026年10月13日 22:40
jsp转发和重定向(一个jsp页面中的链接跳到别一个jps页面,这属于重定向还是转发)
2026年10月13日 20:20





