describe the characteristics of static variable with scope rule請大概描述一下namespace用途 請高手幫忙回答上述兩問題
2006-11-09 12:29:57 · 2 個解答 · 發問者 Anonymous in 電腦與網際網路 ➔ 程式設計
麻煩一下,不要複製網頁,請給我口語化的答案可以嗎
2006-11-09 12:44:48 · update #1
有人寄信要我回答,只好獻醜。我 C++ 不熟,且書都在學校。先給您 C 的(除非有指明那是 C++的),明、後天到校再補 C++ 和 C 不同的部份上來。(Java的和C++的有些不同!學Java的不要看了這篇,以為Java也是這樣!)函數中的變數是函數被呼叫時,才在堆疊裡產生。return 後,就還給堆疊。就算下次立刻再執行到同一個函數,也不一定會被配到同一個RAM。所以,值通常不會一樣。static變數是在主程式執行時就配好RAM了,直到主程式結束。所以,static變數值會和上次呼叫結束時同一個值。而 static int i=0; 只是在主程式執行時,把 0 assign 給 i 那塊 RAM;不是函數每次呼叫時,都 assign 一次 0 給 i。C++有 class。在class 裡的 static 意義又不太一樣(class外的static和C的一樣)!!!!!!class裡的 static 是說:所有的這個 class 的 instance 裡的這個名字的變數,都只用到同一個 RAM!所以,class 裡的 static 變數,在所有的 instance 都用同一個值!在這個 instance裡改了,另一個instace裡的也會跟著改。如:class A{ public: static int same; int diff;}A b, c;b.same = 3, b.diff=4;c.same = 5, c.diff=6;cout << b.same << " " << b.diff;會印出5 4因為 same 是static, 所有的 A 的 object,用同一個 RAM 來記它的 same!而 diff 不是static。所以每個 object 都有它的 RAM 來記 diff。scope rule 是說變數的有效範圍。如下例:void sort(int a[9]){ int i; for (i=0; i<8; i++) { int j; for (j=i+1; j<9; j++) { if (a[i] < a[j]) { int tmp; tmp = a[i], a[i] = a[j], a[j] = tmp; test = 1;} } } }double test;int main(){ int i;test = 3.5;...}變數的有效範圍,是在一個函數內(正確的講法,是在一個 {} 內。如上例中的 tmp 是合法的!它的 scope 只在 if 內的 {} 裡,那是個無名的 inline〝函數〞)。在一個 {} 裡,若找不到這個名字,它就會在它的 外一層的 {} 裡找。(上例,if 中用到 j,但 if 的{}沒有宣告 j, 就去 if 外的 {} 找)找不到,再到上一層找,(到 for (j...) 前的那個 {} ,j 在那裡宣告了)像上例的 i,還要到再外一層才找得到。一出了 sort(),連 i 都超過範圍了!所以,main裡的 i 和 sort 裡的 i 是不同的!到了最外層的函數還沒找到,就要看 global 變數有沒有同名的了!像,test,它雖是 global,但宣告在 sort() 之後!所以,test的 scope 並沒在到 sort()裡,它只在 main()裡!!所以,sort() 裡的 test 那列在 compile 時會錯!C++ 可以用 :: 來指定使用某 Object 內的變數。某種程度上來說,是〝打破〞scope rule。至於您老師為何要把這2個 rule 放在一起,目前想不出來耶!
圖片參考:http://messenger.msn.com/MMM2004-11-10_11.23/Resource/emoticons/red_smile.gif
目前只想到: class 裡的 static 變數的值,因為是同一 class 裡的 Object 共用,有時會用 int A::same = 3; 來設定,而不是用 b.same =3。= = = = =namespace 是用來選不同的定義組(通常是在 .h 裡)。如: namespace A{ const MAX = 20; } namespace B{ const MAX = 40; }您若沒指定 namespace, 則 compile 會說 MAX 有問題!!所以要 using namespace A 或 B那,您就是選了某一組的宣告。
2006-11-12 07:30:56 補充:
漏寫 static 在 global variable!!
那表示這變數只在這個 *.c 或 *.cpp 裡;
在其它的 *.c 或 *.cpp 就算是在同一組的程式裡,也不能讀/寫它。
也許這就是您老師問的 它 與 scope rule 的關係!
2006-11-10 09:26:49 · answer #1 · answered by ? 7 · 0⤊ 0⤋
XML的文件使用大量的元素(element)來定義文件內容,但是不同的XML文件可能會使用相同的元素名稱,若要將兩份具有相同元素名稱的XML文件組合成一份使用(如下面兩個例子),此時就會發生元素名稱衝突的情況,namespace的利用就是為了解決這種情況所產生的。
第一個例子中有三個元素:name, location, company,而company元素參考到name和location兩個元素,在第二個例子中同樣也有name和location兩個元素讓school元素參考,若此兩份也屬於XML文件的schema文件合併起來,則company和school兩個元素所參考到的name和location元素則會有衝突,無法得知參考的元素究竟出自原來的那份文件。
Namespace的設計
XML文件中加入namespace可以增加元素的唯一性,因此在設計namespace上通常會遵循以下兩點:
‧ 以網域(domain)名稱為namespace命名的主體
‧ 在namespace中增加敘述性質的資訊,以提昇namespace的唯一性
以下就是一個namespace的例子和其特性說明:
http://www.mpinfo.com.tw/ns/company/1.0
‧ namespace用URL形式來設計,通常以標準的HTTP協定為首
‧ http://之後加上的是網域名稱,一般以www.domain.com為其格式
‧ 後面的/ns用來說明這是個namespace,可以省略不用
‧ /company是簡短的標籤,可用來點明這份文件的用途
‧ /1.0標明這份文件的版本,可以省略不用
在XML文件中使用Namespace
Namespace的宣告範圍可以涵蓋XML文件內所有的元素,或者只為特定的元素而宣告,以下就舉例說明。
...
上面的namespace放在元素company裡面,包括company以下所有的元素以及其包含的employee_id, Firstname, Lastname, age元素都是屬於http://www.mpinfo.com.tw/ns/company這個namespace,所以為一個元素及其子元素建立namespace的方法為:
‧ 在元素的起始標籤內加入一屬性xmlns
‧ xmlns=後面加上設計好namespace的URL字串
如果加上xmlns的元素沒有子元素,則設定在xmlns屬性的namespace涵蓋範圍就只限於該元素。
還有一種設定namespace的方式是為了避免namespace的涵蓋範圍子元素,我們來看看以下的例子。
我們在第一行就設定一個可以涵蓋所有元素的namespace,但在第二行又加了一個名為company的namespace,而只有在元素標籤中加上company的元素,才屬於company這個namespace,因此我們可以看到只有mpinfo和employee這兩個元素屬於company這個namespace。要注意的是,company這個namespace是在companies元素的起始標籤中所設定的,所以可以使用的範圍也僅限於companies元素之內,不可以在schools或者更上層的organization中使用。特定namespace的建立方式為:
‧ 在元素的起始標籤內加入一屬性xmlns:prefix,prefix為所要設定的namespace的簡稱
‧ xmlns:prefix=後面加上設計好namespace的URL字串
在某一元素使用特定namespace的方法則為:
‧ 在元素的起始標籤的<後面,加上prefix:,prefix為已設定好的namespace簡稱
‧ 在元素的結束標籤的後面,同樣的加上prefix:
我們XML深入淺出下一期會為大家帶來XPath的介紹,敬請期待。
2006-11-09 12:36:24 · answer #2 · answered by 小豬猛哥 3 · 0⤊ 0⤋