日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

谁知道静态成员的纠结心境

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谁知道静态成员的纠结心境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們在實際開發的過程中,可能需要某些類的成員變量并不是針對每一個對象的,而是針對每一個類而言的,比如在銀行中有一個利率數據,我們希望的是,當一個利率改變的時候,所有的對象都能夠看到這個改變的數據,并利用它,而不是每一個對象都有一個利率成員變量。這個時候就設計到了靜態成員變量。
一. 內存那些事 靜態成員變量是存放在靜態全局區(數據段),一個對象改變了其中的靜態變量,其他對象的這一變量也都隨之改變。 說其是靜態變量,個人是這樣理解的,該變量不會因為某一次函數調用或者某個對象的銷毀而銷毀,它是一直存在在靜態全局區的。也可以這樣理解,它在靜態全局區的位置始終沒有變過,它是靜止不動的,直到整個程序結束掉。
二. C語言中"自私"的static(他人不可見) static的三個私生子 說static三個私生子,個人的理解是這個樣子的,static修飾的變量或者是函數只在當前文件中有用,其他的文件對這些函數或者是變量都是不可見的。 私生子承受了這么大的壓力,當然是要給與好處的,對于靜態變量如果沒有初始化的話,如果這個變量是int類型的,它被初始化為0,如果是字符型的,則被初始化為'\0'。
私生子1--局部變量(私生子中的私生子) 修飾局部變量的時候雖然它的存儲方式發生了改變,由原來的棧區放置在了靜態全局區,這個時候,他是一直存在著的,但是它的作用域沒有改變,就是說它依然在只這個函數里面有效。
私生子1--全局變量 如果是一個普通的全局變量,比如在一個工程中的某個文件中定義的變量在其他的文件中也可以使用,此時只需要加上一個extern就可以使用了,但是這個全局變量加上static之后就不能在其他的文件中使用了。它在其他文件中的可見性就改變了 私生子3--函數 修飾函數的時候和修飾變量的情況差不多,只不過是改變了函數的可見性而已
三. C++中“孤獨”的static(沒有“對象”的對象) 當我們在類中定義一個靜態變量的時候,實際上是聲明一個靜態變量,擁有靜態變量的每個類創建的對象中實際是沒有這個靜態成員變量的相關的數據的,這個成員變量是存放在靜態全局區,所以我們要在類的外面聲明這個靜態變量在類外定義的時候,要加上類的作用域符號,指定是哪個類的靜態成員。 因為靜態成員變量不屬于任何一個對象,所以我們不能使用類的構造函數進行靜態成員變量的初始化,我們必須在類的外部定義并初始化靜態成員變量。 靜態成員函數是沒有this指針的,同樣的道理,靜態函數在只有一個副本,它不屬于任何一個對象所擁有。
調用靜態成員函數的幾種方式: static修飾的變量或者函數只有一個副本,它不屬于任何一個對象的,所以這個可以使用對象和類去訪問,用類訪問的時候需要加上類的作用域 雖然靜態成員函數不屬于某個對象,使用類的對象、引用和指針來進行訪問,還有一種方式是使用類名::函數名進行訪問(原因是這個函數也是靜態的)。
四. static的死對頭--extern 關于extern,我們可以使用extern在一個文件中去訪問其他文件中的函數或者是變量,但是這個時候要求如果訪問的是變量的話,則要求訪問的變量是全局屬性的,并且不是靜態的,如果這個變量是在一個函數內部的,即是時在main函數的內部也訪問不了,因為它不具有全局屬性。 我們為什么不使用#include這種方式來調用函數或者是一個變量呢,因為是extern的速度更快 還應該注意的一個問題是,我們經常說的是數組名實際上是一個指針,就是在使用的時候完全可以把它當做一個指針來使用,但是如果我們在一個文件中定義了一個全局數組,比如char arr[] = "hello";然后在另一個 變量中 去使用extern char* arr;,但是這個時候是錯誤的,因為數組和指針還是有不同 的,這個時候只有聲明為extern char arr[];才可以使用。 五. static的好基友--全局變量 總結:其實靜態變量和全局變量有很多地方一樣,唯一的不同時靜態全局變量具有隱藏的屬性。

看看靜態成員可以幫我們解決什么問題吧 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等關鍵字以及條件判斷語句
    #include <iostream>  using namespace std;  class Temp  {  public:  Temp()  {  ++N;  Sum+=N;  }  static void Reset()  {  N=0;  Sum=0;  }  static int GetSum()  {  return Sum;  }  private:  static int N;  static int Sum;  };  int Temp::N=0;  int Temp::Sum=0;  int solution_Sum(int n)  {  Temp::Reset();  Temp *a=new Temp[n];  delete []a;  a=0;  return Temp::GetSum();  }  int main()  {  cout<<solution_Sum(100)<<endl;  return 0;  }  



解題思路:因為定義了靜態成員變量,我們這里定義了對象數組,每次實例化一個對象 的時候,就會改變靜態變量,而且是累加的,所以到最后就得到了結果了。






















總結

以上是生活随笔為你收集整理的谁知道静态成员的纠结心境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。