電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
範圍剖析運算子 ::

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
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;
可以問一下嗎? 為什麼類別名稱前面還需要::

另外可以請問樓上的大哥 通常在業界這些變數的命名都有哪些規則阿??
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
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 開始

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作