您想的有点复杂化了,简单的说吧,您说的运行时的多态是分为可执行文件和非可执行文件,也就是说您的程序打没打包,而您说的编译时的多态也分为两种;1、重载。2、继承。前者是静态的多态形式也就是说不可以用于多个类;针对方法,后者是可以在多个类之间使用,要记得只可以子类继承父类,不可‘以下犯上’。就像是java中的类型,一个是private,另一个是public。
⑵ C++的多态如何在编译和运行期实现
还是得通过一个例子来看看C++是怎样在编译期和运行期来实现多态的。很简单,定义了一个Father类,它有一个testVFunc虚函数哟。再定义了一个继承Father的Child类,它重新实现了testVFunc函数,当然,它也学习Father定义了普通的成员函数testFunc。大家猜猜程序的输出是什么?[cpp]view plain#include<iostreamusingnamespacestd;classFather{public:intm_fMember;voidtestFunc(){ cout<< "FathertestFunc" <<m_fMember<<endl;}virtualvoidtestVFunc(){ cout<<
⑶ 编译时的多态是指针还是对象
编译时的多态,既不是指针,也不是对象,其实就是一个宏。
如果运行时的多态这样:
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++和面向对象根本就是变态!
⑷ 编译时的多态性和运行时的多态性在实现方法上有何不同
我不知道你哪本书上看到的,但是,只要不是后绑定就不能称为多态,前绑定只能称为代码重用,比如函数的重载、覆盖以及一般的类继承。
多态的关键特点就是:在运行时虚基类指针指向派生类对象地址,而将派生类对象地址赋值给基类指针,这就是所谓的后绑定,编译时绑定称为前绑定,因此多态另一个特点就是“动态“。换句话说,如果是后绑定,编译器事先是不知道在运行时指针将指向哪一种派生类的对象,因此基类指针必须是“虚“的,虚基类中不能有任何实现只有定义,此时虚基类的作用就是一个类接口,这样才能在编译时“模糊”掉类型匹配原则,基类的作用只是个约定,定义了函数调用格式,而只在运行时才确定指针具体指向哪一个对象。
而所谓编译时的多态性根本不存在,如果编译器能确定基类指针指向哪一个派生类对象地址,就不是多态,哪怕你采用重载覆盖或者继承,这些编译器已经可以预知的事情,一旦编译完成就固定了,运行时无法更改的,比如你不能在不重新编译的情况下增加一个重载,这就制约了程序运行时的灵活性以及可扩充性。而多态完全可以实现“热“更新,更多的是便于程序的可扩充性。你完全可以将派生类编译在DLL中,每当更新程序时,只要替换掉DLL而不用重新编译全部代码。
⑸ 请问一下Java里编译时多态和运行时多态的区别,最好举个例,谢谢
个人看法
多态的概念 父类引用指向子类对象 而实际调用的方法为子类的方法。
编译时多态 Java里叫重载 严格来说不叫多态 运行时多态 有继承 有重写 父类引用指向子类对象
例子我看就算了 书上多 的是
⑹ 1. 编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同
多态从实现的角度可以划为两类:编译时多态和运行时多态。
编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。
运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
1、多态实现形式不同:
编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。
2、多态性通过方式不同:
编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。
(6)多态编译扩展阅读:
静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。
动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。
⑺ c++中,可将多态性分为编译时的多态性和()
编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。而运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
⑻ 编译时多态性使用什么获得!A重载函数B继承C虚函数D.B和C
函数重载和模板。就这题来说选A。
继承和虚函数对应的多态需要在运行的时候才能确定具体对象,所以不属于编译时多态。
函数重载是让一个函数名对应多个函数,编译器会根据调用时候的特征确定要调用的函数,不需要再运行时处理。
而模板是让一个一个类型模板或者函数模板对应多个类型或者函数,编译器根据对模板实例化是使用的参数生成具体的类和函数,也不是在运行时进行的。
另外注意模板变量不属于多态范畴。
⑼ 请问 c++中 模板是 编译时多态还是运行时多态,或者都不是,求解
是编译时多态。所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态。
你仔细想一想,模板在应用时都必须指定确定的类型,而运行多态仅需指定一个基类就OK啦。
⑽ 在java多态中,编译看左边,运行看右边是什么意思,哪位大侠能帮忙详细解释一下 谢谢了.
Animal c = new Cat(); 左边是 Animal 类(或接口) 右边是 Cat()类; 在编译的时候编译器不管你右边是什么类,只要左边的Animal类(或接口)能编译通过就不会报错。但是运行的时候就要按照右边的Cat()类实际情况来运行。