const 常成員函式
常資料成員
Something (int vlaue) : m_value(value) {
}
- 必須使用初始式初始化
- 初始化後不可修改
常成員函式
void fun() const;
void Something :: fun() const{
}
const在函式頭外
常成員函式不能修改資料成員
void Something :: fun(const Smonething * const this)
const在this前
將this變為指向常量的常指標
常物件
- 不能修改常物件的公開成員的資料
- 只能呼叫常成員函式(公開的)
const T_class t1(1,2)
透過建構函式初始化
t1.a=7; //非法
t2.b=6; //非法
static 靜態成員
- 為同類物件共享
- 靜態成員函式與靜態資料成員協同操作
- 以static宣告
- sizeof 運算子不會作用於靜態成員
靜態資料成員
class A{
public:
static int count; //用來統計建構函式被呼叫的次數
A(){count++;}
int showcount(){
return count;
};
};
int A::count=0; //必須在類外初始化
- 私有靜態成員也必須在類外初始化
- 訪問方法
- 使用物件訪問
- 使用時加類名
靜態成員函式
static int getvalue(something & b){
b.m_x = 10;
return s_value;
}
- 只能訪問靜態成員
- 可以透過引數將物件傳入
- 不能呼叫非靜態成員函式
- 本質:編譯器不為靜態成員函式新增this指標
class a{
public:
static void fun(int i,x *ptr);
int dat;
};
void a::fun(int i,x * ptr){
dat=i; // 錯誤!!!
ptr->dat=i; // 正確!!!
}
友元
- friend 修飾
- 能夠訪問類的私有成員的全域性函式
- 提高執行效率
友元函式
- 一個類的友元函式可以訪問該類的私有成員
![[Pasted image 20231226163459.png]]![[Pasted image 20231226163543.png]]
友元類
- A時B的友元類,A的成員函式可以訪問B的私有成員
特性
- 非對稱
- 非傳遞
呼叫
- 透過類成員呼叫
- 透過物件引數訪問
![[6.3 其他成員函式和友元.pdf]]