⑴ 编译时多态性使用什么获得!A重载函数B继承C虚函数D.B和C
函数重载和模板。就这题来说选A。
继承和虚函数对应的多态需要在运行的时候才能确定具体对象,所以不属于编译时多态。
函数重载是让一个函数名对应多个函数,编译器会根据调用时候的特征确定要调用的函数,不需要再运行时处理。
而模板是让一个一个类型模板或者函数模板对应多个类型或者函数,编译器根据对模板实例化是使用的参数生成具体的类和函数,也不是在运行时进行的。
另外注意模板变量不属于多态范畴。
⑵ 编译时的多态性和运行时的多态性在实现方法上有何不同
我不知道你哪本书上看到的,但是,只要不是后绑定就不能称为多态,前绑定只能称为代码重用,比如函数的重载、覆盖以及一般的类继承。
多态的关键特点就是:在运行时虚基类指针指向派生类对象地址,而将派生类对象地址赋值给基类指针,这就是所谓的后绑定,编译时绑定称为前绑定,因此多态另一个特点就是“动态“。换句话说,如果是后绑定,编译器事先是不知道在运行时指针将指向哪一种派生类的对象,因此基类指针必须是“虚“的,虚基类中不能有任何实现只有定义,此时虚基类的作用就是一个类接口,这样才能在编译时“模糊”掉类型匹配原则,基类的作用只是个约定,定义了函数调用格式,而只在运行时才确定指针具体指向哪一个对象。
而所谓编译时的多态性根本不存在,如果编译器能确定基类指针指向哪一个派生类对象地址,就不是多态,哪怕你采用重载覆盖或者继承,这些编译器已经可以预知的事情,一旦编译完成就固定了,运行时无法更改的,比如你不能在不重新编译的情况下增加一个重载,这就制约了程序运行时的灵活性以及可扩充性。而多态完全可以实现“热“更新,更多的是便于程序的可扩充性。你完全可以将派生类编译在DLL中,每当更新程序时,只要替换掉DLL而不用重新编译全部代码。
⑶ 请问一下java里编译时多态和运行时多态的区别,最好举个例,谢谢
个人看法
多态的概念 父类引用指向子类对象 而实际调用的方法为子类的方法。
编译时多态 Java里叫重载 严格来说不叫多态 运行时多态 有继承 有重写 父类引用指向子类对象
例子我看就算了 书上多 的是
⑷ 编译时的多态是指针还是对象
编译时的多态,既不是指针,也不是对象,其实就是一个宏。
如果运行时的多态这样:
class A
{
virtual int f() = 0;
}
class A1 : public A
{
int f() {return 1;}
}
class A2 : public A
{
int f() {return 2;}
}
那么编译时多态相当于这样写:
class A
{
#ifdef _THIS_IS_CLASS_A1_
int f() {return 1;}
#elif defined _THIS_IS_CLASS_A2_
int f() {return 2;}
#endif
};
最后,结论:C++和面向对象根本就是变态!
⑸ 1. 编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同
多态从实现的角度可以划为两类:编译时多态和运行时多态。
编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。
运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
1、多态实现形式不同:
编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。
2、多态性通过方式不同:
编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。
(5)编译时多态属于后期绑定扩展阅读:
静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。
动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。
⑹ 关于Java的编译时多态和运行时多态
您想的有点复杂化了,简单的说吧,您说的运行时的多态是分为可执行文件和非可执行文件,也就是说您的程序打没打包,而您说的编译时的多态也分为两种;1、重载。2、继承。前者是静态的多态形式也就是说不可以用于多个类;针对方法,后者是可以在多个类之间使用,要记得只可以子类继承父类,不可‘以下犯上’。就像是java中的类型,一个是private,另一个是public。
⑺ Java代码的编译期绑定和运行期绑定是什么意思
如果打包成jar的话很好如果是exe的话就有点麻烦了可参考:想要把java生成可执行文件需要第三方软件的支持,不过在没有安装JDK的机器上是不可能运行JAVA程序的,哪怕是编译成为exe文件。将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)1.从获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。2.利用微软的SDK-Java4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:7.Instantiations公司的JOVE/jove/ejovesystem.htmJOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede已经不复存在了。8.JToEXEBravoZuluConsulting,Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。
⑻ C#中的多态问题
多态又称后期绑定,是一种在运行时(just in time)指定方法调用地址的技术。
通常,编译器在编译期就能知道方法的地址,运行时直接加载这个地址上的堆栈代码(.net中指中间代码)就可以了,这被称为静态绑定或前期绑定,虽然很少使用这个术语。
编译器在编译期不能确定方法的地址,而只能在运行时确定的就被称为后期绑定(或动态联编)。例如,对于object类的ToString方法,其方法定义是返回类的名称,但是,调用这个方法却不一定能够返回类的名称(如String类),因为它有可能被派生类重写,多态技术确保运行时能够调用到正确的方法。
关于多态和继承的区别,继承实现了类型重用,而多态实现了方法重用。
⑼ C++多态运行期绑定(后期绑定)的实现需要具备哪些前提条件
(1)满足类型兼容规则
类型兼容的问题只在公有继承下存在,有以下三种情况:
1)派生类对象可赋值给基类对象
2)派生类的对象可以初始化基类的引用
3)派生类的地址可以赋值给基类的指针
(2)基类中定义虚函数,并且派生类中要重新定义虚函数(注意和重载的区别)
(3)由成员函数或者通过指针、引用访问虚函数。
⑽ override是属于运行时多态还是编译多态
运行时多态,根据运行时调用参数对象不同,选择不同的方法