局部静态数据
在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。局部静态变量再程序执行到作用域时候,就会存在。
局部静态数据再内存中的静态存储区。
初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。
作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。
静态函数
在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。
warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰。
类的静态成员
静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。
静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化静态成员可以被初始化,但只能在类体外进行初始化。 一般形式:数据类型 类名::静态数据成员名=初值。
静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。
静态成员属于整个类所有,不需要依赖任何对象,它在对象中不占用存储空间。
静态成员仍然遵循public,
是这样的,访问数据库的方式写成静态,并不是所有的都是静态。
即,把数据库连接写成静态。
而查询、删除、修改不能写成静态。
这样后,所有的用户,连接是同一个。
html是静态页面,因此,如果实现数据库动态调用,最好的方法就是使用AJAX技术,使用XMLHTTPrequest来请求。给一个示例吧:
function requestHttp(){
var request
if(window.XMLHttpRequest) {
request = new XMLHttpRequest()
if(request.overrideMimeType) {request.overrideMimeType('text/xml')
}
} else if(window.ActiveXObject) {
var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']
for(var i=0i<versions.lengthi++) {try
{request = new ActiveXObject(versions[i])break}
catch(e) {}
}}
return request
}
function xmlhttp(){
this.r=requestHttp()
}
xmlhttp.prototype.postopen=function(url,data){
this.r.open('POST',url,false)
this.r.setrequestheader("content-type","application/x-www-form-urlencoded")
this.r.onreadystatechange = ReadyStateChange(this)
if(typeof(data)=='undefined')
this.r.send()
else
this.r.send(data)
}
xmlhttp.prototype.getopen=function(url){
if(window.XMLHttpRequest) {this.r.open('GET',url)
this.r.onreadystatechange = ReadyStateChange(this)
this.r.send(null)
} else {
this.r.open("GET", url, true)
this.r.onreadystatechange = ReadyStateChange(this)
this.r.send()
}
}
ReadyStateChange=function(obj){
return function(){
if(obj.r.readyState==4){
obj.status=obj.r.status
obj.text=obj.r.responseText
obj.body=obj.r.responseBody
callpage()
}
}
}
把这个别存为Shopajax.js
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript" src="shopajax.jss"></script>
</HEAD>
<BODY>
<div id="as"></div>
<SCRIPT LANGUAGE="JavaScript">
<!--
var ajax=new xmlhttp()
debugger
ajax.getopen("1.html")
function callpage(){
if(ajax.status==0){//本地为0,远程为200
var obj=eval('('+ajax.text+')')
document.getElementById("as").innerHTML="年纪:"+obj.Age+"<br>薪水:"+obj.Money
}
}
//-->
</SCRIPT>
</BODY>
</HTML>
这个随便存一个页面保存为index.html
{"Money":2000.00,"Age":21}
把这个存成一个1.html
保存完后,点击Index.html就可以看到Div里面有值了。值是从1.html里面取到的。这个过程实现 了Ajax
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)