#include
#include
using
namespace std;
class
point
intgetx()
intgety()
void
num(
)friend
float
dist
(const point &a,
const point& b)
;//友元授權
private
:int x, y;
static
int count;};
int point:: count =0;
//靜態變數要這樣初始化
float
dist
(const point &a,
const point &b)
//乙個計算兩個點距離的函式;
intmain()
類中的靜態變數用static定義,為該類的所有物件所共有
例如可以定義乙個記錄物件個數的靜態變數,在構造和賦值構造物件時使其加1,在析構時使其減去。
static
int count;
int point:: count =0;
//靜態變數要這樣初始化
point
(int xx =0,
int yy =0)
://製作乙個點並計數
x(xx),y
(yy)
若是分開檔案(類的定義和類中函式的說明不在乙個問件)那麼用到靜態變數時前面要加 類名::
如果這個類沒有物件,我們如何訪問其中的靜態變數?
(如果類有物件,我們可以以物件為橋梁,呼叫自定義函式訪問其私有靜態變數)
友元是c++提供的一種破壞資料封裝和資料隱藏的機制
可以宣告友元函式和友元類
在定義類時要給友元函式授權,且友元函式要有引數
friend
float
dist
(point &a, point& b)
;//友元授權,用引用使用這個物件效率高點;
float
dist
(point &a, point &b)
//乙個計算兩個點距離的函式;
也可以直接把另乙個類作為友元,這樣子友元類可以直接訪問他的私有成員,友元類的方向時單向的;
1定義常物件:
在定義的時候初始化,且不能被更新: const 類名 物件名
const point p1(1
,2);
2常成員:用const來修飾的成員(const 可以作為過載函式的區分)
如果時const類物件,會呼叫重名函式中有const修飾的那個
void
print()
;void
print()
const
;//編譯器認真審查函式體,不改變引數的值
3常引用:
被引用的物件不能更新:const 型別說明符&引用名
friend
float
dist
(const point &a,
const point& b)
;//友元授
類模板中的靜態變數
先上 具體看輸出和注釋 編譯器並不是把函式模板處理成能夠處理任意類的函式 編譯器從函式模板通過具體型別產生不同的函式 編譯器會對函式模板進行兩次編譯 在宣告的地方對模板 本身進行編譯 在呼叫的地方對引數替換後的 進行編譯。include using namespace std template cl...
C 類中的靜態變數
c 類中的靜態變數 靜態資料成員 下面看乙個例子 include class point static void init void main void 這樣編譯是不會有任何錯誤的。下面這樣看 include class point static void init void main void 這...
類的 靜態 常成員 及 友元
靜態成員 靜態成員 include using namespace std class m class1 static void fun2 int m class1 a 1,m class1 b 2,m class1 c 3 初始化時不加static,以免與一般靜態變數混淆 int main cla...