問題:對象之間有幾種關系,分別是什麼?
簡單來講,對象間的關系可以描述為:
has-a 關系:包含關系,A對象中包含B對象。這是在一個類中嵌入另一個類的實例實現的。
is -a 關系:繼承關系,B對象是對A對象的繼承。這是由繼承技術實現的。
has-access-to 關系:可訪問關系,即B可以訪問A中的數據成員。這是由友元類和引用實現的。
問題:什麼是友元類?
友元類的所有成員函數都是另一個類的友元函數,都可以訪問另一個類中的隱藏信息(包括私有成員和保護成員)。
當希望一個類可以存取另一個類的私有成員時,可以將該類聲明為另一類的友元類。定義友元類的語句格式如下:
friend class 類名;
其中:friend和class是關鍵字,類名必須是程序中的一個已定義過的類。
例如,以下語句說明類B是類A的友元類:
class A
{
…
public:
friend class B;
…
};
經過以上說明後,類B的所有成員函數都是類A的友元函數,能存取類A的私有成員和保護成員。
使用友元類時注意:
(1) 友元關系不能被繼承。
(2) 友元關系是單向的,不具有交換性,不具有傳遞性。
問題:引用的使用需要注意一些什麼?
引用在創建之時必須初始化,或在其聲明中完成。對於成員引用,在構造方法的前導中完成初始化。或者在調用一個帶有引用的方法時,在調用之時完成。
問題:右移位運算符的工作方式有什麼不同 ?
對於無符號數,1011>>1 == 0101,對於有符號類型,1011>>1 == 1101,因為無論怎麼移位,是不會改變其符號的,對於任何一個數字來說,移位運算符,右移都是除以2,左移都是乘以2(假設不溢出)。