上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
satanupup 喜歡上這裡的冒險者
註冊時間: 2007-05-29 文章: 80
68.10 果凍幣
|
發表於: 2007-10-12, PM 11:58 星期五 文章主題: 範圍剖析運算子 :: |
|
|
::運算子將類別名稱與成員名稱連在一起,
範圍剖析運算子還有另一個相關的用法 :
它可以允許程式對涵蓋範圍內的名稱的存取,
這個範圍是隱藏在相同名稱的區域宣告下
例:
代碼: |
int i; //global i
void f()
{
int i; // local i
i = 10; // uses local i
.
.
}
|
注釋建議的,指定敘述 i = 10 是指區域變數 i 。
但是如果函式 f() 需要存取全域 i 該怎麼辦?
你可以在 i 的前面加上 :: 運算子, 就如這裡所示範的。
代碼: |
int i; //global i
void f()
{
int i; //local i
::i = 10; //now refers to global i
.
.
.
}
|
|
|
回頂端 |
|
|
fire231 散播福音的祭司
註冊時間: 2007-09-15 文章: 152
322.55 果凍幣
|
發表於: 2007-10-13, PM 6:30 星期六 文章主題: Re: 範圍剖析運算子 :: |
|
|
所以::i是全域變數的i
而i是函數裡面的i嚕?
還是不要取相同名字比較好吧 |
|
回頂端 |
|
|
satanupup 喜歡上這裡的冒險者
註冊時間: 2007-05-29 文章: 80
68.10 果凍幣
|
發表於: 2007-10-14, PM 2:59 星期日 文章主題: Re: 範圍剖析運算子 :: |
|
|
fire231 寫到: | 所以::i是全域變數的i
而i是函數裡面的i嚕?
還是不要取相同名字比較好吧 |
這個似乎是用來設定更多的變數用的
似乎可以讓程式更好分類吧 |
|
回頂端 |
|
|
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2007-10-14, PM 4:43 星期日 文章主題: |
|
|
類別大了以後會好用,為了名稱統一方便用...
例 :
假設一個類別為下:
代碼: |
class a
{
public:
string name;
int tall;
int weight;
//...等
};
|
要用他的時候每個屬性都要設定的話,就要寫成 :
代碼: |
name = "Apple";
tall = 160;
weight = 60;
//...等
|
屬性多的話就會寫的很長...
所以通常會寫一個設定屬性的函數 :
用 fire231 所說的用不同名字就像這樣(假設名稱前面都加m好了) :
代碼: |
void Setup(string mname, int mtall, int mweight)
{
name = mname;
tall = mtall;
weight = mweight;
}
|
用起來是沒問題...不過你在寫呼叫這個函數的時候,跑出來的提示功能(VC++的話就是黃色那條)就是 :
void Setup (std::string mname, int mtall , int mweight)
如果你是編譯好的函式庫給別人用...別人第一次在用也許就覺得奇怪
「不是只有 name 屬性嗎? 怎麼會變成輸入 mname ?」
用 satanupup 所說的方法寫出來的話 :
代碼: |
void Setup2(string name, int tall, int weight)
{
::a::name = name;
::a::tall = tall;
::a::weight = weight;
}
|
你在寫呼叫這個函數的時候,跑出來的提示功能就變成 :
void Setup2 (std::string name, int tall , int weight)
目前我只知道可以用在這邊啦 0v 0
全部code
代碼: |
#include <iostream>
#include <string>
using namespace std;
class a
{
public:
string name;
int tall;
int weight;
void Setup(string mname, int mtall, int mweight)
{
name = mname;
tall = mtall;
weight = mweight;
}
void Setup2(string name, int tall, int weight)
{
::a::name = name;
::a::tall = tall;
::a::weight = weight;
}
};
void main()
{
a *pp;
pp = new a();
pp->name = "Apple";
pp->tall = 160;
pp->weight = 60;
cout << pp->name << " " << pp->tall << " " << pp->weight << endl;
pp->Setup("Bpple",170,70);
cout << pp->name << " " << pp->tall << " " << pp->weight << endl;
pp->Setup2("Cpple",180,80);
cout << pp->name << " " << pp->tall << " " << pp->weight << endl;
}
|
_________________ 已經畢業了!! |
|
回頂端 |
|
|
happylin 略有貢獻的成員
註冊時間: 2007-07-26 文章: 70
127.34 果凍幣
|
發表於: 2007-10-15, AM 8:04 星期一 文章主題: |
|
|
[quote="babu61509"]類別大了以後會好用,為了名稱統一方便用...
例 :
假設一個類別為下:
代碼: |
class a
{
public:
string name;
int tall;
int weight;
//...等
};
|
基本上class 的member 最好不要取這樣的名稱. 因為容易跟local value 搞混
一般. 有的人的習慣是在前面加一個_
example string _name;
兒我的習慣是加一個m_
example string m_name;
更近一步. 我跟本不會去一個全小寫的變數
可能回取 m_strName;
函數參數部份. 則會加a_
example Set(string a_strName .. )
global 變數通常我會加上 g_
至於local value 則前面什麼都不加.
這些只是一種寫作習慣. 參考參考. |
|
回頂端 |
|
|
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2007-10-15, PM 12:40 星期一 文章主題: |
|
|
爲什麼會跟local value搞混= =?
local value 就是 local 的 value
class value 就是 class 的 value
一個是直接使用,一個還要class名字才能用,怎麼會搞混~_~?
而且宣告 class 通常是為了重複使用,爲什麼還在local裡在宣告同樣的東西...? _________________ 已經畢業了!! |
|
回頂端 |
|
|
lsk 喜歡上這裡的冒險者
註冊時間: 2007-06-20 文章: 93
20.59 果凍幣
|
發表於: 2007-10-16, AM 2:13 星期二 文章主題: |
|
|
babu61509 寫到: | 爲什麼會跟local value搞混= =?
local value 就是 local 的 value
class value 就是 class 的 value
一個是直接使用,一個還要class名字才能用,怎麼會搞混~_~?
而且宣告 class 通常是為了重複使用,爲什麼還在local裡在宣告同樣的東西...? |
要是在member function裡面,class variables是不用在前面加上class name的喔,這種情況下你就會發現沒有加上適當字首的變數是很難讀的。
至於會在local裡宣告同樣的東西... 比如說我們要計算一個人的行走速度好了。如果在這個函式裡我們要考慮這個人站的地方(比如說一個移動的平台)的速度,那就有一個class variable跟一個local variable是跟速度有關係的了,要是在這個函式裡又有一些需要暫存的速度,那就很有可能會搞混囉。
說真的,寫小支的程式(多小? 可能數千到數萬行這樣的範圍吧)真的是不會有感覺的。一個人寫的程式(以後也不會有別人來幫寫的)可能也沒關係。不過,命名規則不是前輩們吃飽沒事發明出來的喔~ : ) |
|
回頂端 |
|
|
a19870504 對這略感興趣的新人
註冊時間: 2008-01-11 文章: 17
0.00 果凍幣
|
發表於: 2008-1-11, AM 9:24 星期五 文章主題: |
|
|
::a::name = name;
::a::tall = tall;
::a::weight = weight;
可以問一下嗎? 為什麼類別名稱前面還需要::
另外可以請問樓上的大哥 通常在業界這些變數的命名都有哪些規則阿?? |
|
回頂端 |
|
|
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2008-1-11, AM 10:03 星期五 文章主題: |
|
|
a19870504 寫到: | ::a::name = name;
::a::tall = tall;
::a::weight = weight;
可以問一下嗎? 為什麼類別名稱前面還需要::
|
那個沒加也可以跑啦@_@
加了只是代表從 global namespace 開始 _________________ 已經畢業了!! |
|
回頂端 |
|
|
|