類的友元及類中的靜態變數

2021-10-02 16:15:42 字數 1776 閱讀 7659

#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...