簡體   English   中英

在類外部訪問私有靜態變量

[英]Accessing private static variable outside class

一段時間后,我正在使用C ++,我已經在類中將靜態變量聲明為私有,並且據我所知,靜態變量獨立於對象並在對象之間共享。如果我嘗試使用以下方法在類外部打印靜態變量我得到編譯錯誤的類名是因為變量是私有的? 我確實讀過,只能通過類名稱和范圍解析運算符訪問靜態變量。

#include <iostream>

using namespace std;

class Sample{

    int val;
   static int value;
    public:


        Sample(int in);
        Sample();
        void setval(int in){

            val = in;
        }

        void printval ()const{

            cout << val<<endl;
        }

};

Sample::Sample(int in){

    val = in;
}

Sample::Sample(){

    val = 0;
}

int Sample::value = 34;
int main()
{

   const Sample obj(1);
   Sample obj2;

   obj2.printval();

   obj.printval();

  cout <<"static value = " << Sample::value;

   return 0;
}

錯誤

main.cpp:37:5: error: 'int Sample::value' is private                                                                                                                                                  
 int Sample::value = 34;                                                                                                                                                                              
     ^                                                                                                                                                                                                
main.cpp:49:39: error: within this context                                                                                                                                                            
   cout <<"static value = " << Sample::value; 

據我所知,靜態變量獨立於對象並在對象之間共享

那是對的。 但是,跨對象實例共享變量並使變量可訪問彼此獨立。 (共享,可訪問)對有四種組合。 您可以使用全部四個:

  • public static變量在類外部共享和訪問
  • private static變量是共享的,但不能在類外部訪問
  • public非靜態變量未共享,但可在類外部訪問
  • private非靜態變量不能在類外部共享或訪問

請注意,可以在使用非靜態val之后建模處理私有靜態value的方式,即通過為類用戶提供一些公共成員函數來使用靜態變量:

class Sample {
...
public:
    static int getvalue() { return value; }
};

現在您可以像這樣打印它:

cout << "static value = " << Sample::getvalue();

私有類成員和方法只能由類的成員和方法訪問。 無論類成員是否為靜態,這都是正確的。 這對類成員的可訪問性沒有影響。

請注意,公共類方法可以像其他任何方法一樣訪問私有類成員,並且這並不排除公共類方法返回指向私有類成員的指針或引用。 那是您的一種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM