下載了WPS,但為什么打不工表格和文檔(為什么wps表格打字打不出來)
842
2025-03-31
博客鏈接:https://blog.csdn.net/qq_39412582/article/details/81215272 正文開始: ##一 · 靜態成員 ## 我們知道全局變量能夠實現數據共享,如果在多個程序文件中有多個函數,每一個函數中都可以來改變全局變量的值,但是這樣做是不安全的,如不小心改錯就會導致程序崩潰,因此在實際運用中很少用到全局變量。 但是有時候我們就是要用到多個對象之間實現數據共享,除了全局變量,就是我們今天要提到的靜態成員。
1.1 靜態數據成員
class Person
{
private:
char* _name;
static char* _gender;??? //把_gender定義為靜態數據成員
int?? _age;
}
靜態數據成員是一個特殊的數據成員,以static開頭。如果希望個對象的數據成員的值是一樣的,就可以把它定義為靜態數據成員。聲明為靜態數據成員有個好處就是它只占用一分內存空間,而不是每個對象都為它留下一塊空間。
對于靜態成員函數作以下幾點說明: ⑴前面說過,如果只申明類而未定義對象,則類的一般數據成員是不占空間的,只有在定義對象時,才會為對象的數據成員分配空間。但是靜態數據成員不屬于某一個對象,在為對象所分配的空間中不包括靜態數據成員所占的空間,它是在對象之外單獨開辟空間,只要定義了靜態成員變量,即使不定義對象,也會為其分配空間還能被引用。 ⑵靜態數據成員既然不會隨著對象的建立而分配空間,那么自然也不會隨著對象的撤銷而釋放。靜態數據成員是在程序開始運行時被分配空間,到程序結束時才會釋放空間。 ⑶靜態數據成員只能在類外進行初始化。
char* Person::_gender ="man"
要注意的是不能用參數初始化表來對靜態數據成員初始化: {:--} ⑷靜態數據成員既可以通過對象名引用還可以通過類名引用:
class Person
{
public:
Person(char* name, char* gender, int age)
:_name(name)
, _age(age)
{}
static char* _gender;
private:
char* _name;
int? _age;
};
char* Person::_gender = "man";
int main()
{
Person p("Peter", "man", 18);
cout << Person::_gender << endl;
cout << p._gender << endl;
return 0;
}
{:--}
如果靜態數據成員定義為私有的,就不能在類外直接引用,而必須通過公有函數進行引用。
class Person
{
public:
Person(char* name, char* gender, int age)
:_name(name)
{}
static char* _gender;
int PersonAge();
private:
char* _name;
static int? _age;
};
char* Person::_gender = "man";
int Person::PersonAge()
{
return _age=18;
}
⑸與全局變量不同的是,靜態數據成員的作用域只限于定義該類的作用域中,在類的作用域中可以通過類名和域運算符“::”來進行引用
2 靜態成員函數 和靜態數據成員一樣,成員函數也可以是靜態的,在類里聲明的函數名前加上**“static”就成了靜態成員函數,它是類的一部分而不是對象的一部分。如果在類為引用靜態成員函數需要用類名和域運算符“::”**。如:
Person::PersonAge();
實際上也可以寫成:
p.PersonAge();
但這并不能說這個函數是屬于對象p的,而是只能說用了p的類型而已。 當調用一個對象的成員函數數時(非靜態成員函數),系統會把該對象的起始地址賦給成員函數的this指針。而靜態成員數不屬于對象的成員函數,與任何對象無關,因此靜態成員函數沒有this指針。既然沒有指向某一對象,就無法對一個對象里的非靜態成員進行默認訪問(即在引用數據成員時不指定對象名)----面試題。
靜態成員函數可以直接引用本類中的靜態成員,我們給個例子再來說明一下:
class Box
{
public:
Box(int length,int width,int height)
: _width(width)
, _height(height)
{}
static void volume();???? //靜態成員函數
private:
static int _length;
int _width;
int _height;
};
void Box::volume()
{
//cout<<_width<
本文轉載自異步社區
C++
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。