SORU
3 HAZİRAN 2011, Cuma


Sınıf içinde statik değişken yöntemleri

Lütfen statik yöntem değişkenler C nasıl çalıştığını açıklamak ... eğer şu Dersim var eğer biri olabilir:

class A {
   void foo() {
      static int i;
      i  ;
   }
}

Eğer birden çok örneğini açıklıyorum, foo arama yapar() tüm örneklerine bir örnek üzerinde artış statik değişken miyim? Ya da adı üzerinde sadece bir tane mi?

Her örnek ben kendi kopyasını diye düşünmüştüm, ama ben bazı kod boyunca adım atma yoksa işaret gibi görünüyor.

Şerefe

CEVAP
3 HAZİRAN 2011, Cuma


3* *bu kelime ne yazık ki C kaç farklı alakasız bir anlamı vardır

  1. Veri üyeleri için kullanılan veri demektirsınıfta ayrılmışve durumda değil.

  2. Verileri statik olarak ayrılan bu demek oluyor ki, bir fonksiyon içinde veri için kullanılan zamanblok girilir ilk kez başlatıldıve program sonlandırılıyor kadar sürer. Aynı zamanda değişken işlev içinde görünür. Yerel statiği bu özellik genellikle tek tembel inşaat uygulamak için kullanılır.

  3. Ne zaman kullanılan bir derleme birimi düzeyinde (modül) anlamına değişkendir gibi bir küresel (yani tahsis ve başlatılmadan önce main çalıştırın ve tahrip sonra main çıkar) amadeğişken veya başka bir derleme birimleri erişilebilir görünmez.

Her kullanım için en önemli olan kısmı biraz ağırlık ekledim. Kullanımı (3) Ayrıca, BM tarafından verilen sınıf bildirimleri için izin veren isimsiz ad lehine biraz önerilmez.

Kodunuzda static kelime anlamı numarasını 2 ile kullanılır ve sınıfları veya örnekleri ile bir ilgisi yok... bu bir değişken varişlevive sadece tek bir kopyası olacak.

Olarak doğruiammilindeğer işlevi bir şablon işlevi bu durumda gerçekten işlevi program içinde birçok farklı kopyaları mevcut olabilir çünkü), eğer birden fazla olabilir dedi bu değişkenin örnekleri. Hatta tabii ki bu durumda sınıfları ve örnekleri ilgisiz... örnek bkz:

#include <stdio.h>

template<int num>
void bar()
{
    static int baz;
    printf("bar<%i>::baz = %i\n", num, baz  );
}

int main()
{
    bar<1>(); // Output will be 0
    bar<2>(); // Output will be 0
    bar<3>(); // Output will be 0
    bar<1>(); // Output will be 1
    bar<2>(); // Output will be 1
    bar<3>(); // Output will be 1
    bar<1>(); // Output will be 2
    bar<2>(); // Output will be 2
    bar<3>(); // Output will be 2
    return 0;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Liz Morgan

    Liz Morgan

    4 Aralık 2011
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005