C++多态是怎么实现的?
1、C++中,在调用重载函数时,能够根据参数的类型及个数来找到确定的函数。然而,这一过程是通过编译来完成的,也就是说,程序中寻找重载函数具体地址的工作是在程序编译过程中完成的,程序一旦编译完成,所有函数、方法等(包括重载函数、方法)的调用地址都已明确。
2、C++中,多态是运行时特征,也就是说,程序实现多态是在程序运行的过程中来实现的。这一过程通常是针对虚拟类或方法来的,即在程序运行过程中动态的确定虚拟类或方法的地址,从而实现具体的类或方法的调用。
3、根据楼主的举例,实现多态输入,无非是希望程序在运行过程中,自动区分输入内容的数据类型,此后程序根据具体的数据类型来调用相应的方法。由上述2所述,C++程序不具备针对变量的多态特性。因此,如果要实现这类“多态”,仍旧是程序员的职责,即程序员在代码中来实现输入的内容的具体数据类型。
什么是多态机制?
多态机制(Polymorphi***)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual FuNCTion) 实现的。
我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。
一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须由程序运行期间才能决定,这就是多态性
多态性可以分为编译时多态和运行时多态。
编译时多态:主要是指方法的重载,它是根据参数列表的不同来区分不同的函数运行时多态:在运行时谈不上多态,而运行时多态是动态的,它是通过动态绑定来实现,也就是我们说的多态性
是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
多态建立在类的继承之上:
类成员的 “横向拓展” (类成员越来越多)
类成员的 “纵向拓展” (类的行为改变,类的成员的 “版本升高”)
类成员的隐藏 (new 关键字)——不常用,因为理解复杂且容易出错
类成员的重写 (override 关键字)
重写和隐藏发生的条件:函数或属性成员一致,拥有可见性(如父类的是private,那肯定不能重写了),函数或属性签名需要一致(方法名,参数类型,返回类型)
多态分为哪两中?
1. 多态分为静态多态和动态多态两种。
2. 静态多态是指函数重载和运算符重载,通过函数名或运算符号的不同参数列表来实现多态。
动态多态是指虚函数和抽象类,通过在基类中定义虚函数,在派生类中重写虚函数来实现多态。
3. 多态是面向对象编程中的重要概念,可以提高代码的可读性和可维护性,同时也可以实现代码的灵活性和扩展性。
在实际编程中,需要根据具体的需求选择合适的多态方式。