類的靜態成員 類的友元 共享資料的保護 多檔案結構

2021-10-08 03:37:56 字數 3504 閱讀 2250

類的友元

共享資料的保護

多檔案結構

#include

using

namespace std;

class

point

point

(point &p)

~point()

intgetx()

intgety()

static

void

showcount()

private

:// 私有資料成員

int x,y;

static

int count;

// 靜態資料成員的宣告,用於記錄點的個數};

int point::count =0;

// 靜態資料成員定義和初始化,使用類名限定

intmain()

為了確保資料的完整性,及資料封裝與隱藏的原則,建議盡量不使用或少使用友元。

作用:增加靈活性,使程式設計師可以在封裝和快速性方面做合理選擇。

示例: 使用友元函式計算兩點間的距離

#include

#include

using

namespace std;

class

point

intgetx()

intgety()

friend

float

dist

(point &a, point &b)

;// 友元函式

private

://私有資料成員

int x, y;};

float

dist

( point& a, point& b)

intmain()

宣告語法:將友元類名在另乙個類中使用friend修飾說明。

class

aprivate

:int x;};

classb;

void b::

set(

int i)

void b::

display()

;

注意:類的友元關係是單向的

對於不改變物件狀態的成員函式應該宣告為常函式

常成員:用const進行修飾的類成員:

常引用:被引用的物件不能被更新

常陣列:陣列元素不能被更新

常指標:指向常量的指標

常物件舉例

classa.

..private

:int x,y;};

a consta(

3,4)

;//a是常物件,不能被更新

常成員函式舉例
#include

using

namespace std;

class

rvoid

print()

;void

print()

const

;// 常成員函式宣告

private

:int r1, r2;};

void r::

print()

void r::

print()

const

intmain()

常資料成員舉例

為什麼要在建構函式中完成對常資料成員的初始化賦值操作?

因為常資料成員只能賦值一次,當物件被建立時,會自動呼叫建構函式,對成員資料進行賦初值,如果不指定,通常被賦值為0,而0不一定時我們想要的數值。

#include

using

namespace std;

classa;

const

int a::b=10;

// 靜態資料成員的定義和初始化

// 注意***********************************************

// 只能通過建構函式的 引數初始化列表 對常資料成員進行初始化。不能採用在建構函式的函式體中對常資料成員賦初值的方法

a::a

(int i):a

(i)// 通過建構函式初始化常資料成員,且只能在初始化列表中初始化,不能在建構函式的函式體中初始化賦值

void a::

print()

intmain()

常引用舉例

常引用作形參

#include

#include

using

namespace std;

class

point

intgetx()

intgety()

friend

float

dist

(const point &p1,

const point &p2)

;// 這樣的友元函式建立,會使得當前類更安全

private

://私有資料成員

int x, y;};

float

dist

(const point &p1,

const point &p2)

intmain()

如何理解初始化列表???宣告定義是兩碼事,宣告僅僅是給編譯器作提示用,定義是編譯器實實在在地把內容轉換成二進位制**,分配記憶體空間,作為可執行的特定指令。所以宣告可以有多處,但是同一內容卻只能定義一次以避免定義二義性和模糊性。用extern就是明確告訴編譯器這是在宣告,而不是定義

對於函式宣告,加不加extern都行,因為函式的宣告後面會跟乙個分號,很容易辨識。但是,基本變數的定義和宣告在不加extern時,都會被對待為定義,所以要想使用其他檔案的全域性變數,必須在引用的檔案中用extern宣告。

將變數和函式限制在編譯單元內

namespace

括起來的區域都屬於匿名的命名空間。

C 類的this指標,靜態成員,友元函式友元類

在上篇講c 中類,物件,封裝,繼承 派生 多型的時候,this指標出現在成員函式中,並使用 成員提取符操作成員變數。在 c 中,每乙個物件都能通過 this 指標來訪問自己的位址,this 指標是所有成員函式的隱含引數,實際上成員函式預設第乙個引數為t const register this,thi...

友元(友元函式 友元類 類成員函式的友元)

friend 友元機制 允許乙個類將對其非公有成員的訪問許可權授予指定的函式或者類。我們可以將友元大致分為3類 友元函式 是指某些雖然不是類的成員函式,但是能夠訪問這個類的所有成員的函式。比如我們下列的 include class test friend void show test rhs 宣告 ...

類的 靜態 常成員 及 友元

靜態成員 靜態成員 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...