-:靜態成員
靜態成員函式或者是靜態成員,其都是屬於類的;而不是屬於類的物件的。然後因為靜態成員是不與任何物件繫結
在一塊的,所以靜態成員函式不包括this指標的。因此靜態成員函式是不能宣告成const的,而且我們也不能在static
函式體內使用this指標。這一限制既適用於this的顯示使用,也對呼叫非靜態成員的隱式使用有效。(也就是說,靜態成
員函式是不可以呼叫普通的成員函式的,也不可以呼叫普通的成員的。只能呼叫靜態的成員或者靜態成員函式)。
我們使用作用域運算子直接訪問靜態成員:
class
astatic
double
rate()
static
void
rate
(double);
private
: std::string owner;
double amount;
static
double interestrate;
static
double
initrate()
;};double r;
r = a::
rate()
;//使用作用域運算子訪問靜態成員
二:定義和初始化靜態成員
和其他成員函式一樣,我們既可以在了類的內部也可以在類的外部定義靜態成員函式。當在類的外部定義靜態成員時,不能重複static
關鍵字,該關鍵字只能出現在類內部的宣告語句:
void a::
rate
(double newrate)
注意:和類的所有成員一樣,當我們指向類外部的靜態成員時,必須指明成員所屬的類名。static關鍵字則只出現在類內部的宣告語句中。
因為靜態資料成員不屬於類的任何乙個物件,所以它們並不是在建立類的物件時被定義的。這意味著他們不是由類的建構函式初始
化的。而且一般來說,我們不能在類的內部初始化靜態成員。相反的,必須在類的外部定義和初始化每個靜態成員。和其他物件一樣,一
個靜態資料成員只能定義一次。
我們定義靜態資料成員的方式和在類的外部定義成員函式差不多。我們需要指定物件的型別名,然後是類名,作用域運算子以及成
員自己的名字:
//定義並初始化乙個靜態成員
double a::interestrate =
initrate()
;這條語句定義了名為interesrate的物件,該物件是a的靜態成員,其型別是double。從類名開始。這條定義語句的剩餘部分就都位於
類的作用域之內了。因此,我們可以直接使用initrate函式。雖然其是私有的成員函式。
通常情況下,類的靜態成員不應該在類的內部初始化。然而,我們可以為靜態成員提供const整數累的類內初始值,不過要求靜
態成員必須是字面值常量型別的constexpr。初始值必須是常量表示式,因為這些成員本身就是常量表示式,所以它們能用在所有
適合於常量表示式的地方。
class
astatic
void
rate
(double);
private
:static
constexpr
int period =30;
//period是常量表示式
double daily_tbl[period];}
;注意:類的靜態成員一定要初始化!!!
!!
三:初始化靜態成員函式指標:
void
number
(int n)
classb;
void
(*b::p)
(int number)
= number;
注意:所有的靜態成員一定要初始化,而且注意這個函式指標初始化的形式void
(*b::p)
(int number)。
四:如果出現你呼叫的靜態成員函式出現如下錯誤:
undefined reference to `linkedbinarytree
::visit'
這種情況下就是表示你沒有對你的靜態成員函式進行初始化,所以你必須對靜態成員函式進行初始化!!! c 中靜態成員和靜態成員函式
1.靜態成員屬於整個類 2.靜態成員函式不能使用普通成員變數,只能使用靜態成員。pragma once class location include location.h include iostream using namespace std location location int a loc...
關於靜態成員和靜態成員函式
一般的情況下我們為了實現資料的共享,通常設定變數為全域性變數和設定成靜態成員變數,但是一般的情況因為全域性變數的安全性不高,往往採用靜態成員變數,靜態成員變數一般以static 開頭,static 成員變數屬於類,不屬於某個具體的物件,它不會隨著物件的建立而產生,也不會因物件的撤銷而釋放記憶體。st...
C 中靜態成員函式
類的靜態成員變數屬於類的成員而不是物件,供所有物件共享,存放於全域性區,因而不計入類的記憶體計算。使用靜態成員變數實現多個物件之間的資料共享不會破壞隱藏的原則,保證了安全性還可以節省記憶體。靜態成員變數可以通過類直接訪問。靜態成員不屬於類的任何物件,所以並不是物件建立時被定義的,所以它不能由類的建構...