c 中可以對類中私有成員中的靜態變數初始化嗎?

2022-09-16 07:09:13 字數 1428 閱讀 5934

問題:我看的書上寫的對私有部分的訪問可以是公共部分的成員函式,也可以是友員函式,那麼可以直接對私有部分的靜態成員進行初始化嗎?

回答:

1.static成員的所有者是類本身和物件,但是多有物件擁有一樣的靜態成員。從而在定義物件時不能通過建構函式對其進行初始化。

2.靜態成員不能在類定義裡邊初始化,只能在class body外初始化。

3.靜態成員仍然遵循public,private,protected訪問準則。

4.靜態成員函式沒有this指標,它不能返回非靜態成員,因為除了物件會呼叫它外,類本身也可以呼叫。

下面乙個類,和其中的一些錯誤用法:
#include 

#include

using

namespace std;

class account

//account(string name, int money, double rate):owner(name), amount(money), interestrate(rate)

//是錯誤的

~account()

////

靜態成員

static

double rate()

static

void rate(double);

static

double interestrate;//

public,其他非成員可以訪問

private:

string owner;

double amount;

//static double interestrate;

//private, 成員和友元才可訪問

static

double initrate();

};double account::interestrate = 2.0; //

正確的靜態成員初始化

//double account::interestrate = account::initrate();

//用靜態成員函式對靜態成員進行初始化,正確,因為private成員可以訪問private成員,以上兩種初始化只能選其一

//account::interestrate = 3.0;

//錯誤,不能通過編譯,原因不明,按編譯結果看,編譯器將這個賦值語句當做對靜態成員的初始化(因為編譯器提醒少了型別:double)。但主函式中可以通過,見下

double account::initrate()

//所有的靜態成員在類體外定義時都不再寫static

void account::rate(double newrate)

int main ()

好了,就這些了!其中的數字只是為了資料的明顯,沒有實際意義!

C 中訪問私有成員

首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...

C 中訪問私有成員

首先訪問乙個類的私有成員不是什麼好做法。大家都知道私有成員在外部是不能被訪問的。乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員造訪,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有時候,源 是別...

C 中訪問私有成員

首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...