当前位置:首页 » 编程软件 » 编译时多态

编译时多态

发布时间: 2022-01-18 17:38:43

编译时的多态是指针还是对象

编译时的多态,既不是指针,也不是对象,其实就是一个宏。

如果运行时的多态这样:
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++和面向对象根本就是变态!

⑵ 关于java的编译时多态和运行时多态

您想的有点复杂化了,简单的说吧,您说的运行时的多态是分为可执行文件和非可执行文件,也就是说您的程序打没打包,而您说的编译时的多态也分为两种;1、重载。2、继承。前者是静态的多态形式也就是说不可以用于多个类;针对方法,后者是可以在多个类之间使用,要记得只可以子类继承父类,不可‘以下犯上’。就像是java中的类型,一个是private,另一个是public。

⑶ 请问一下Java里编译时多态和运行时多态的区别,最好举个例,谢谢

个人看法
多态的概念 父类引用指向子类对象 而实际调用的方法为子类的方法。
编译时多态 Java里叫重载 严格来说不叫多态 运行时多态 有继承 有重写 父类引用指向子类对象
例子我看就算了 书上多 的是

⑷ 请问 c++中 模板是 编译时多态还是运行时多态,或者都不是,求解

是编译时多态。所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态。

你仔细想一想,模板在应用时都必须指定确定的类型,而运行多态仅需指定一个基类就OK啦。

⑸ c++中,可将多态性分为编译时的多态性和()

编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。而运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。

⑹ 编译时的多态性和运行时的多态性在实现方法上有何不同

我不知道你哪本书上看到的,但是,只要不是后绑定就不能称为多态,前绑定只能称为代码重用,比如函数的重载、覆盖以及一般的类继承。
多态的关键特点就是:在运行时虚基类指针指向派生类对象地址,而将派生类对象地址赋值给基类指针,这就是所谓的后绑定,编译时绑定称为前绑定,因此多态另一个特点就是“动态“。换句话说,如果是后绑定,编译器事先是不知道在运行时指针将指向哪一种派生类的对象,因此基类指针必须是“虚“的,虚基类中不能有任何实现只有定义,此时虚基类的作用就是一个类接口,这样才能在编译时“模糊”掉类型匹配原则,基类的作用只是个约定,定义了函数调用格式,而只在运行时才确定指针具体指向哪一个对象。
而所谓编译时的多态性根本不存在,如果编译器能确定基类指针指向哪一个派生类对象地址,就不是多态,哪怕你采用重载覆盖或者继承,这些编译器已经可以预知的事情,一旦编译完成就固定了,运行时无法更改的,比如你不能在不重新编译的情况下增加一个重载,这就制约了程序运行时的灵活性以及可扩充性。而多态完全可以实现“热“更新,更多的是便于程序的可扩充性。你完全可以将派生类编译在DLL中,每当更新程序时,只要替换掉DLL而不用重新编译全部代码。

⑺ 1. 编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同

多态从实现的角度可以划为两类:编译时多态和运行时多态。

编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。

运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。

1、多态实现形式不同:

编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。

2、多态性通过方式不同:

编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。

(7)编译时多态扩展阅读:

静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。

动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。

⑻ 编译时多态性使用什么获得!A重载函数B继承C虚函数D.B和C

函数重载和模板。就这题来说选A。
继承和虚函数对应的多态需要在运行的时候才能确定具体对象,所以不属于编译时多态。

函数重载是让一个函数名对应多个函数,编译器会根据调用时候的特征确定要调用的函数,不需要再运行时处理。
而模板是让一个一个类型模板或者函数模板对应多个类型或者函数,编译器根据对模板实例化是使用的参数生成具体的类和函数,也不是在运行时进行的。
另外注意模板变量不属于多态范畴。

⑼ 方法重载和方法重构导致了多态 对不对

这是其中的一种多态;

在JAVA中有两种多态是指:运行时多态和编译时多态。

对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性.
如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性.

所以,一般情况下,重载指的是编译时多态,重写是运行时多态;因为重载是在编译时就知道调用哪个方法;而如果是子类实例调用父类方法,那么需要运行时才能知道调用什么方法,故为运行时多态;

补充一下:不知道你写的重构指的是重载还是调整代码

⑽ C++语言中编译时的多态性是通过____ _ ____实现的.空里填什么呢

function checkName()
{
var flag=true;
var userName = $("#username").val();
if(chkNullOrEmp(userName))
{
$.ajax({
type : 'post',
url : '<%=basePath%>register/checkName.action?r='+Math.random(),
async: false,
data:"userbean.username="+encodeURI(encodeURI($.trim(userName))),
dataType : 'json',
success : function(json)
{
if(json.operFlag=='success')
{
if(json.count>0)
{
usermsg.innerHTML = "<font color='red'>" +"用户名已存在!"+ "</font>";
flag=false;
}
usermsg.innerHTML = "<font color='green'>" +"恭喜您,用户名可以使用!"+ "</font>";
}
else
{
alert("操作失败");
flag=false;
}
},
error : function(error)
{
alert("操作失败!");
flag=false;
}
});
}

if(flag)
{
return true;
}
else
{
$("#saveBnt").attr("disabled","");
return false;
}
}

function register(){
$("#saveBnt").attr("disabled",true);
if(checkData()&&checkName())
{
var username=$("#username").val();
var name = $("#userForm").find("input[id='username']").val();
var password = $("#userForm").find("input[id='password']").val();
var v_data = "userbean.username="+name+"&userbean.password="+password;
$.ajax({
type : 'post',
url : '<%=basePath%>register/addUser.action?r='+Math.random(),
data : v_data,
dataType : 'json',
async : false,
success : function(data){
if(data.operflag=="success")
{
alert("操作成功");
}
else
{
alert("操作失败");
}

},
error :function(error) {
alert("操作失败!");
}
});
}

}

function checkData()
{
var username = $("#userForm").find("input[id='username']").val();
var password = $("#userForm").find("input[id='password']").val();
var repassword = $("#userForm").find("input[id='repassword']").val();

if(!chkNullOrEmp(username))
{
alert("用户名称不能为空");
$("#saveBnt").attr("disabled","");
return false;
}

if(!chkNullOrEmp(password))
{
alert("密码不能为空");
$("#saveBnt").attr("disabled","");
return false;
}

if(repassword!=password)
{
alert("两次密码不一致");
$("#saveBnt").attr("disabled","");
return false;
}
return true;
}

/**
*判断是否为空
*/
function chkNullOrEmp(str)
{
if(str==null)
{
return false;
}
else
{
str = $.trim(str);
if(str.length>0)
{
return true;
}
else
{
return false;
}
}
}

热点内容
apache压缩 发布:2024-11-15 15:11:54 浏览:245
java比较三个数 发布:2024-11-15 15:08:39 浏览:835
fml加密 发布:2024-11-15 15:05:56 浏览:882
存储上市龙头 发布:2024-11-15 14:52:14 浏览:38
我的世界服务器怎么重置教学 发布:2024-11-15 14:52:13 浏览:123
C语言tf 发布:2024-11-15 14:36:22 浏览:811
违反密码法是什么意思 发布:2024-11-15 14:36:20 浏览:920
androidmp3录音 发布:2024-11-15 14:32:50 浏览:494
英朗自动挡哪个配置最好 发布:2024-11-15 14:27:44 浏览:254
编译原理断言有哪几种 发布:2024-11-15 14:25:29 浏览:201