類的友元
共享資料的保護
多檔案結構
#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...