C++类中静态变量和静态方法使用介绍

原文出处

静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里,我们主要讲述类的静态成员来实现数据的共享。

在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。

使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

1、静态数据成员在定义或说明时前面加关键字static。//静态变量的定义

2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:
<数据类型><类名>::<静态数据成员名>=<值> //静态变量的初始化

这表明:

下面举一例子,说明静态数据成员的应用:

注意,static成员的初始化要在实现中进行,不能在头文件进行。

从输出结果可以看到Sum的值对M对象和对N对象都是相等的。这是因为在初始化M对象时,将M对象的三个int型数据成员的值求和后赋给了Sum,于是Sum保存了该值。在初始化N对象时,对将N对象的三个int型数据成员的值求和后又加到Sum已有的值上,于是Sum将保存另后的值。所以,不论是通过对象M还是通过对象N来引用的值都是一样的,即为:
54,s.A=3。

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:

  • c璇█static(闈欐佸彉閲銆侀潤鎬佸嚱鏁般侀潤鎬佸叏灞鍙橀噺)
    绛旓細鍦C璇█涓紝static鏄竴涓潪甯搁噸瑕佺殑鍏抽敭瀛楋紝瀹冨彲浠ョ敤浜庡畾涔闈欐佸彉閲銆侀潤鎬佸嚱鏁颁互鍙婇潤鎬佸叏灞鍙橀噺銆傞潤鎬佸彉閲忋侀潤鎬佸嚱鏁鍜岄潤鎬鍏ㄥ眬鍙橀噺鐨勪綔鐢ㄥ煙鍜岀敓鍛藉懆鏈熶笌鏅氬彉閲忋佸嚱鏁板拰鍏ㄥ眬鍙橀噺鏈夋墍涓嶅悓锛屼娇鐢ㄥ畠浠彲浠ュ府鍔╂垜浠洿濂藉湴绠$悊绋嬪簭鐨勭姸鎬佸拰鏁版嵁銆傞潤鎬佸彉閲 闈欐佸彉閲忔槸鎸囧湪鍑芥暟鍐呴儴鎴栬呭潡鍐呴儴瀹氫箟鐨勫彉閲忥紝浣嗘槸瀹冪殑鐢...
  • C#涓潤鎬佸彉閲忓拰鏂规硶鏈変粈涔堢敤澶?
    绛旓細1锛闈欐佸彉閲\x0d\x0a\x0d\x0a鍦–#绋嬪簭涓紝娌℃湁鍏ㄥ眬鍙橀噺鐨勬蹇碉紝杩欐剰鍛崇潃鎵鏈夌殑鎴愬憳鍙橀噺鍙湁璇绫荤殑瀹炰緥鎵嶈兘鎿嶄綔杩欎簺鏁版嵁锛岃繖璧峰埌浜嗏滀俊鎭殣钘忊濈殑浣滅敤銆備絾鏈変簺鏃跺欙紝杩欐牱鍋氬嵈涓嶆槸涓槑鏅虹殑閫夋嫨銆俓x0d\x0a\x0d\x0a鍋囪鎴戜滑瑕佸畾涔変竴涓浘涔︾被锛岃姹傝绫昏兘淇濆瓨鍥句功鐨勬暟閲忥紝鍗虫瘡澧炲姞涓鏈浘涔︼紙...
  • 浠涔堟槸闈欐?浠涔堟槸闈欐佹柟娉,闈欐佸彉閲,闈欐佸潡鍜岄潤鎬佺被
    绛旓細static淇グ鐨勶紝灏辨槸鍦ㄥ姞杞界被鏂囦欢鐨勬椂鍊欐墽琛岀殑浠g爜 灞炰簬鎵鏈夌殑瀵硅薄锛屽瓨鏀句簬static鍖哄煙涓 瀹冧慨楗版柟娉曞氨鏄闈欐佹柟娉 淇グ鍙橀噺灏辨槸闈欐佸彉閲 闈欐佸潡灏辨槸闈欐佺殑浠g爜鍧 渚嬪 static{ System.out.println("浣犲ソ");} 闈欐绫荤殑璇 涓鑸儏鍐典笅鏄笉鍙互鐢╯tatic淇グ绫荤殑銆傚鏋滀竴瀹氳鐢╯tatic淇グ绫荤殑璇濓紝閫氬父static淇グ...
  • 浠涔堟椂鍊欑敤闈欐佸彉閲 闈欐佹柟娉?涓轰粈涔堣浣跨敤闈欐佸彉閲 銆侀潤鎬佹柟娉?
    绛旓細鍦ㄥ閮ㄨ皟鐢ㄩ潤鎬佹柟娉曟椂锛屽彲浠ヤ娇鐢"绫诲悕.鏂规硶鍚"鐨勬柟寮忥紝涔熷彲浠ヤ娇鐢"瀵硅薄鍚.鏂规硶鍚"鐨勬柟寮忋傝屽疄渚嬫柟娉曞彧鏈夊悗闈㈣繖绉嶆柟寮忋備篃灏辨槸璇达紝璋冪敤闈欐佹柟娉曞彲浠ユ棤闇鍒涘缓瀵硅薄銆傞潤鎬佹柟娉曞湪璁块棶鏈绫荤殑鎴愬憳鏃讹紝鍙厑璁歌闂潤鎬佹垚鍛橈紙鍗抽潤鎬佹垚鍛鍙橀噺鍜岄潤鎬佹柟娉锛夛紝鑰屼笉鍏佽璁块棶瀹炰緥鎴愬憳鍙橀噺鍜屽疄渚嬫柟娉曪紱瀹炰緥鏂规硶鍒欐棤姝ら檺鍒躲
  • 闈欐佹柟娉曞彲浠ヨ闂闈欐佸彉閲忓拰闈欐佹柟娉,瀵瑰悧
    绛旓細鍦ㄤ竴涓被閲屽0鏄庝竴涓闈欐佹柟娉曞拰闈欐佸彉閲锛岄偅涔堟槸鍏ㄥ眬鐨勶紝鑰屼笖鏄被鏂规硶鍜岀被鍙橀噺锛岀洿鎺ュ彲浠ョ敤绫诲悕绉.绫绘柟娉曟垨鍙橀噺鏉ヤ娇鐢紝寰堢畝鍗曘
  • 鎻忚堪static鍏抽敭瀛椾慨楗鐨勬柟娉,鍙橀噺涓鏅氭柟娉,鍙橀噺鐨勫尯鍒
    绛旓細鎮ㄥソ锛屾彁闂咃細1銆闈欐佸彉閲鐢╯tatic鍏抽敭瀛椾慨楗般2銆佸鏋滃畾涔変簡闈欐佸彉閲忥紝閭d箞鍔犺浇class鏂囦欢鐨勬椂鍊欎細浼樺厛鍔犺浇銆3銆佸畠鐨勮寖鍥存槸鐩村埌绋嬪簭鍋滄锛岄潤鎬佸唴瀛樻墠浼氭秷澶便4銆佽屼笖static鍏抽敭瀛椾慨楗扮殑鍙橀噺浼氬彧鍔犺浇涓娆°5銆闈欐佹柟娉涓彲浠ョ洿鎺ヨ皟鐢ㄩ潤鎬佺殑锛岃岄潪new锛岃闂牸寮忥細绫诲悕.闈欐;6銆侀潤鎬佹柟娉曚腑涓嶅彲鐩存帴璋冪敤闈為潤鎬...
  • C璇█static鐨浣滅敤?
    绛旓細鍦C璇█涓紝static鍏抽敭瀛楃殑浣滅敤濡備笅锛1銆佸湪淇グ鍙橀噺鐨勬椂锛宻tatic淇グ鐨勯潤鎬灞閮ㄥ彉閲忓彧鎵ц涓娆★紝鑰屼笖寤堕暱浜嗗眬閮ㄥ彉閲忕殑鐢熷懡鍛ㄦ湡锛岀洿鍒扮▼搴忚繍琛岀粨鏉熶互鍚庢墠閲婃斁銆2銆static淇グ鍏ㄥ眬鍙橀噺鐨勬椂锛岃繖涓叏灞鍙橀噺鍙兘鍦ㄦ湰鏂囦欢涓闂紝涓嶈兘鍦ㄥ叾瀹冩枃浠朵腑璁块棶锛屽嵆渚挎槸extern澶栭儴澹版槑涔熶笉鍙互銆3銆乻tatic淇グ涓涓嚱鏁帮紝鍒欒繖涓...
  • 闈欐佺被璋冪敤闈欐佹柟娉曞拰 鏅氱殑绫昏皟鐢闈欐佹柟娉曠殑鍖哄埆
    绛旓細1銆闈欐佹柟娉灞炰簬绫绘墍鏈夛紝绫诲疄渚嬪寲鍓嶅嵆鍙娇鐢紱2銆侀潪闈欐佹柟娉曞彲浠ヨ闂被涓殑浠讳綍鎴愬憳锛岄潤鎬佹柟娉曞彧鑳借闂绫讳腑鐨勯潤鎬鎴愬憳锛3銆佸洜涓洪潤鎬佹柟娉曞湪绫诲疄渚嬪寲鍓嶅氨鍙互浣跨敤锛岃岀被涓殑闈為潤鎬佸彉閲忓繀椤诲湪瀹炰緥鍖栦箣鍚庢墠鑳藉垎閰嶅唴瀛橈紱4銆乻tatic鍐呴儴鍙兘鍑虹幇static鍙橀噺鍜鍏朵粬static鏂规硶!鑰屼笖static鏂规硶涓繕涓嶈兘浣跨敤this绛夊叧閿瓧锛...
  • 浠涔堟槸闈欐佹柟娉曞拰闈欐佸彉閲,浠栦滑鍚屾櫘閫鐨鎴愬憳鏂规硶鍜屽彉閲忔湁浠涔堝尯鍒...
    绛旓細闈欐佹柟娉曞拰闈欐佸彉閲忎竴杩愯灏辩粰浠栦滑鍒嗛厤鍦板潃绌洪棿浜绫讳腑闈欐佹柟娉曞拰闈欐佸彉閲鍙睘浜庣被锛岀洿鎺ュ彲浠ヨ皟鐢紱鑰屾櫘閫氱殑鎴愬憳鏂规硶鍜屽彉閲忓垯瑕侀氳繃绫荤殑瀵硅薄鍘昏皟鐢
  • 闈欐佸彉閲鍦ㄤ袱涓绫讳腑涓鏍峰悧
    绛旓細闈欐佸彉閲鍦ㄤ袱涓绫讳腑涓鏍凤紝鍘熷洜濡備笅锛1銆佹槸鐩稿悓鐨勶紝static鍙橀噺鏄睘浜绫荤殑锛屽睘浜庣被鎵鏈夊璞$殑锛屽綋涓涓被璋冪敤骞舵敼鍙榮tatic灞炴ф椂锛屼篃鏀瑰彉浜嗘墍鏈夊璞鐨剆tatic灞炴с2銆佸鏋滄槸鏅氬彉閲忕殑璇濓紝涓涓璞℃敼鍙樺叾鏅氬睘鎬э紝鍙槸杩欎釜瀵硅薄鐨勫睘鎬у彂鐢熸敼鍙橈紝鍏朵粬瀵硅薄鐨勮繖涓睘鎬т笉鍙戠敓鏀瑰彉銆
  • 扩展阅读:web前端三大主流框架 ... 静态变量的正确使用 ... 静态方法属于 ... 静态变量存在什么位置 ... c++静态成员变量初始化 ... c++静态变量 ... c++静态多态 ... 静态变量static会变吗 ... 静态方法作用 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网