国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++之模板(友元函數+友元類+靜態Static)

2019-11-06 07:02:27
字體:
來源:轉載
供稿:網友

友元函數 友元函數分為友元全局函數和友元成員函數。 下面是一個友元全局函數的例子:

class Coordinate{ friend void PRintXY(Coordinate &c);public: Coordinate(int x, int y);private: int m_iX; int m_iY;};

友元函數的應用

void printXY(Coordinate &c){ cout << c.m_iX << c.m_iY << endl;//友元函數可以順利訪問private}int main(){ Coordinate coor(3, 5); printXY(coor);//傳入對象名而非地址 return 0;}

下面是友元成員函數的例子

class Coordinate{ friend void Circle::printXY(Coordinate &c);//是Circle類的成員函數public: Coordinate(int x, int y);private: int m_iX; int m_iY;};class Circle{ void printXY(Coordinate &c) { cout << c.m_iX << c.m_iY << endl; }};int main(){ Coordinate coor(3, 5); Circle circle; circle.printXY(coor);//傳入對象名而非地址 return 0;}

友元函數也存在一定的風險,在上述代碼中,通過成員函數很方便的訪問Coordinate的私有成員,很方便,但同時也破壞了它的封裝性,當不小心改了這個值以后,也很不容易察覺。

友元類 友元類的聲明和友元函數的聲明很相似,如下述代碼

class Circle;//要告訴計算機,這個類是定義過的class Coordinate{ friend Circle;public: Coordinate(int x, int y);private: int m_iX; int m_iY;};

在實現Circle類的時候,可以在類中數據成員中包含一個友元的類,并調用其私有成員,如下述代碼所示

class Circle{public: void printXY(c) { cout << c.m_iX << c.m_iY << endl; }private: Coordinate m_coor;};

接下來我們來講一下友元的注意事項 1.友元關系不可傳遞 2.友元關系的單向性 3.友元聲明的形式和數量不受限制 最后我們需要知道的是友元只是封裝的補充,其本身并不是一個很好的語法。友元破壞了類的封裝性,所以盡量不要用友元。

靜態 (static) C++中的靜態分為靜態數據成員和靜態成員函數。 靜態數據成員依賴于類,而不依賴于對象,這意思就是說靜態數據成員即使不實例化,在內存中也存在,他不需要在構造函數中實例化,它的實例化往往是單獨進行的,而普通的數據成員不實例化就不存在,如下述代碼:

class Tank{public: Tank(){ s_iCount++; }//產生新坦克,則坦克數增多 ~Tank(){ s_iCount--; } static int getCount(){ return s_iCount; }//靜態成員函數 static int s_iCount; //靜態數據成員,記錄了我方坦克的數量private: string m_strCode;};int Tank::s_iCount = 0;//不需要再加關鍵字static

那么作為訪問方法來說有兩種,一種是不通過類,而是直接通過對象的訪問方法;另一種是如果我們定義了對象,可以通過對象的方式來調用。如下代碼所示

int main(){ cout << Tank::getCount() << endl;//直接訪問 cout << Tank::s_iCount << endl; Tank tank; cout << tank.getCount() << endl;//通過對象訪問 cout << tank.s_iCount << endl; return 0;}

靜態函數不能調用非靜態的成員,因為static成員一直存在,但是如果沒有實例化的話,就無法調用非靜態的成員。

靜態函數不能加const,因為const修飾的是this指針,靜態函數本身沒有this指針,所以不可能使用。

下面來說一下靜態的注意事項: 1.靜態數據成員必須進行單獨的初始化 2.靜態的成員函數不能調用非靜態的成員函數和非靜態的數據成員,反之可以。 3.靜態的數據成員只有一份,且不依賴于對象而存在。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 古田县| 陕西省| 安乡县| 闵行区| 广昌县| 吉隆县| 大埔区| 永丰县| 塘沽区| 望城县| 蒲江县| 吕梁市| 丰宁| 安吉县| 镇坪县| 松江区| 桓台县| 河间市| 高州市| 靖安县| 东丽区| 西平县| 锡林郭勒盟| 通河县| 盐池县| 扎兰屯市| 宁乡县| 乐业县| 自贡市| 安顺市| 图木舒克市| 宣汉县| 永仁县| 南宁市| 鄂托克前旗| 南城县| 茶陵县| 仪陇县| 台湾省| 彰化县| 灯塔市|