其他成員與友元

study_all_day發表於2024-04-18

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的私有成員

特性

  1. 非對稱
  2. 非傳遞

呼叫

  1. 透過類成員呼叫
  2. 透過物件引數訪問

![[6.3 其他成員函式和友元.pdf]]

相關文章