ASP网页编程之C++ 和 Delphi 的函数掩盖(Override)与...
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧c++|函数C++和Delphi的函数掩盖(Override)与重载(overload)Spacesoft【暗夜狂沙】
在面向工具编程中,当子类承继了来自基类的函数后,子类有大概必要对个中的一些函数作出与基类分歧处置,好比:
classCHuman
{
public:
voidSayMyName()//打印出工具的姓名
{
cout<<"Hi,Iamahuman"<<endl;
}
};
那末很分明,假设他的子类有一个同名、同参数和前往值(一句话,一摸一样)的函数SayMyName,它会挪用哪一个函数呢?好比如今有一个classCMark
classCMark:publicCHuman
{
public:
voidSayMyName()
{
cout<<"Hi,Iammark"<<endl;
}
};
那末我们要问,上面的程序段:
CHuman*pH=newCMark;
if(pH)
pH->SayMyName();
else
cout<<"casterror!"<<endl;
deletepH;
pH=NULL;
要打印出来的,真的是我们想要的Hi,Iammark吗?
不是。它输入了Hi,Iamahuman。这很糟,当我们指着一团体要他说出本人的名字的时分,他却告知我们他“是一团体”,而不是说出本人的名字。呈现如许的成绩缘故原由在于,用基类的指针指向私有派生类,能够会见派生类从基类中承继的成员函数。但假如派生类中也有同名的函数,则了局仍旧是会见基类的同名函数,而不是派生类自己的函数。而现实上,我们但愿的是由一个工具的实在范例来决意究竟该挪用这些同名函数中的哪个,就是说,如许的决定是静态(Dynamic)的。大概我们能够说,我们但愿当一个工具是子范例时,它的同名函数在子类中的完成掩盖(override)失落基类的完成。
我们先从C++对这个成绩的处置提及。
这是C++中对照典范的多态的例子,C++用虚函数来完成如许的多态。详细点说,就是利用virtual关头字来将函数申明成虚函数,在上一个例子中就是应当声明成:
classCHuman
{
public:
virtualvoidSayMyName()//打印出工具的姓名
{
cout<<"Hi,Iamahuman"<<endl;
}
};
如许,其他的代码仍是谁人老模样,可是我们的CMark已晓得怎样说本人的名字了。CMark的SayMyName()函数是不是加了virtual关头字的申明并没有干系,由于依据C++语法的划定,由于它掩盖了CHuman的同名函数,它本人也就成为virtual的了。至于为何一个virtual关头字有那末奇妙的效果呢?C++FAQLite对此是如许申明的:在C++中,“虚成员函数是静态断定的(在运转时)。也就是说,成员函数(在运转时)主动态地选择,该选择基于工具的范例,而不是指向该工具的指针/援用的范例”。因而我们的pH就发明本人实在指向的是一个CMark范例的工具,而不是本人的范例所声明的CHuman,以是它伶俐的挪用了CMark的SayMyName。
而Delphi就是用override关头字来讲明函数掩盖的。被掩盖的函数必需是虚(virtual)的,大概是静态(dynamic)的,也就是说该函数在声明时应当包括这两个唆使字中的一个,好比:
procedureDraw;virtual;
在必要掩盖的时分,只必要在子类顶用override唆使字从头声明一下就能够了。
procedureDraw;override;
在语法下去说,声明为virtual和dynamic是等价的。它们的不同在于,前者在完成上对速率举行了优化,尔后者对代码巨细举行了优化。
假设基类和子类都含有统一个函数名和参数,而且在子类中不加override唆使字呢?这在语法上也是准确的。这意味着子类的函数同名完成把基类的完成埋没(hide)失落了,只管这两者在派生类中都存在。那末就回到了本文开首的第一个例子申明的情形:当我们指着一团体要他说出本人的名字的时分,他却告知我们他“是一团体”,而不是说出本人的名字。
值得注重的是,与我们在C++中经常不加辨别的把掩盖一个函数和重载一个函数通称为重载分歧,在Delphi中,只要重载(overload)才是我们平常所说的重载,被重载的函数仍然存在,依托参数来决意究竟挪用谁人完成。固然,当overload失落的函数和基类的函数参数不异时,基类的完成就被hide失落了,就像下面提到的一样。而掩盖(override)则是把让被掩盖的函数不成见了,确的确实的"掩盖"失落了,本来的完成就不见了。基于如许的缘故原由,很多文章乃至一些书都毛病的把override翻译成重载,笔者以为其实不符合。
</p>对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
页:
[1]