每個(gè)類都會(huì)定義它自己的作用域拷橘。
在類的作用域之外,普通的數(shù)據(jù)和函數(shù)成員只能由對(duì)象气嫁、引用当窗、指針使用成員訪問(wèn)運(yùn)算符來(lái)訪問(wèn)。
對(duì)于類類型成員則使用作用域運(yùn)算符訪問(wèn)寸宵。
無(wú)論那種情況崖面,在運(yùn)算符之后的名字都必須是對(duì)應(yīng)類的成員元咙。
一個(gè)類就是一個(gè)作用域,當(dāng)我們?cè)陬惖耐獠慷x成員函數(shù)時(shí)必須同時(shí)提供類名和函數(shù)名嘶朱。在類的外部蛾坯,成員的名字被隱藏起來(lái)了。
一旦遇到類名疏遏,定義的剩余部分就在類的作用域之內(nèi)脉课,這里的剩余部分包括參數(shù)列表和函數(shù)體。我們可以直接使用類的其他成員無(wú)須再次授權(quán)财异。
函數(shù)的返回類型通常出現(xiàn)在函數(shù)名之前倘零,因此當(dāng)成員函數(shù)定義在類的外部時(shí),返回類型中使用的名字都位于類的作用域之外戳寸。這時(shí)返回類型必須指明它是哪個(gè)類的成員呈驶。
名字查找:尋找與所用名字最匹配的聲明的過(guò)程。
定義在類內(nèi)部的成員函數(shù)疫鹊,解析其中名字的方式與上述的查找規(guī)則有所區(qū)別袖瞻。
編譯器處理完類中的全部聲明后才會(huì)處理成員函數(shù)的定義。
按照這種兩階段的方式處理類可以簡(jiǎn)化類代碼的組織方式拆吆。成員函數(shù)體知道整個(gè)類可見(jiàn)后才會(huì)被處理聋迎,所以它能使用類中定義的任何名字。
而如果函數(shù)的定義和成員被同時(shí)處理枣耀,那么我們將不得不在成員函數(shù)中只使用那些已經(jīng)出現(xiàn)的名字霉晕。
這種兩階段的處理方式只適用于成員函數(shù)中使用的名字。
聲明中使用的名字捞奕,包括返回類型或者參數(shù)列表中使用的名字牺堰,都必須在使用前確保可見(jiàn)颅围。
一般來(lái)說(shuō)內(nèi)層作用域可以重新定義外層作用域中的名字伟葫,即使該名字已經(jīng)在內(nèi)層作用域中使用過(guò)。但在類中如果成員使用了外層作用域中的某個(gè)名字院促,而該名字代表一種類型筏养,則類不能在之后重新定義該名字。
如果編譯器在函數(shù)和類的作用域中都沒(méi)有找到名字一疯,它將接著在外圍的作用域中查找。
當(dāng)成員定義在類的外部時(shí)夺姑,名字查找的第三步不僅要考慮類定義之前的全局作用域中的聲明墩邀,還要考慮在成員函數(shù)定義之前的全局作用域中的聲明。