SORU
16 EYLÜL 2009, ÇARŞAMBA


Bir sınıf ad fonksiyonları karşı statik yöntemler

Hadi var diyelim, ya da yazmak için gidiyorum, ilgili fonksiyonları bir dizi. Hadi matematik ile ilgili olduklarını söylüyorlar. Örgütsel gerekir:

  1. Bu fonksiyonlar yazmak MyMath benim ad koydum ve MyMath::XYZ()), onlara bakın
  2. Bir sınıf MyMath oluşturun ve bu yöntemler statik ve benzer MyMath::XYZ() bakın

Neden benim yazılım düzenleme aracı olarak diğer üzerinden bir tercih yapayım?

CEVAP
16 EYLÜL 2009, ÇARŞAMBA


Varsayılan olarak, namespaced işlevlerini kullanın.

Sınıflar, nesneler, değil değiştirmek için bir ad oluşturmak için.

Odaklı kod Nesne

Scott Meyers bu konuda Etkili C kitabı için koca bir Öğe yazdı, "üye olmayan arkadaş olmayan üye fonksiyonları fonksiyonları Tercih ederim". Ben Herb Sutter bir makale bu ilke için online bir referans buldum: http://www.gotw.ca/gotw/084.htm

Bilmen gereken en önemli şey buBir sınıf sahibi daha aynı ad C fonksiyonları sınıf arabirimi.ADL işlev çağrıları çözerken bu fonksiyonları aramak için ()

"statik yöntemler var oysa.' iç, sınıfa erişimi yok "arkadaş ilan sürece namespaced fonksiyonları,

Bu sınıf bakımını yaparken, eğer sınıf iç, statik olanlar da dahil olmak üzere tüm yöntemleri yan etkileri, aramak gerekir. değiştirmek gerekir ki, örneğin, anlamına gelir

Uzantısı

Ekleme kodu bir sınıf arabirimi.

C#, eğer herhangi bir erişim varsa bile bir sınıf için yöntemler ekleyebilirsiniz. Ama C , bu imkansız.

Ama, hala C , hala namespaced bir işlev, hatta birinin yazdığı bir sınıf ekleyebilirsiniz.

Diğer taraftan bakın, bu bir ad fonksiyonlarını koyarak, kullanıcıların/komple artırmak için izin çünkü kodunuzu tasarlarken çok önemlidir, sınıf arabirimi.

Uzatma II

Bir yan etkisi önceki noktadan, imkansız birden çok üstbilgi statik yöntemleri bildirmek. Her yöntem aynı sınıfta bildirilmelidir.

Ad, aynı ad birden fazla işlevleri başlıklar (neredeyse standart takas işlevini en iyi örnektir) bildirilebilir.

Uzantısı III

Bir ad temel cooless bazı kod, anahtar sözcük kullanırsanız, söz önleyebilirsiniz."":

#include <string>
#include <vector>

// Etc.
{
   using namespace std ;
   // Now, everything from std is accessible without qualification
   string s ; // Ok
   vector v ; // Ok
}

string ss ; // COMPILATION ERROR
vector vv ; // COMPILATION ERROR

Ve hatta sınırlayabilir "kirlilik" için bir sınıf

#include <string>
#include <vector>

{
   using std::string ;
   string s ; // Ok
   vector v ; // COMPILATION ERROR
}

string ss ; // COMPILATION ERROR
vector vv ; // COMPILATION ERROR

Bu "hemen hemen standart takas deyim. uygun kullanımı için zorunlu" desen

Ve bu imkansız statik yöntemleri ile sınıfları.

Yani C ad kendi mantığı vardır.

Ama bir şekilde miras benzer ad birleştirebilirsiniz olarak daha ileri gider.

Örneğin, bir ad ile bir fonksiyon AAA, bir ad B ile bir fonksiyon BBB, ilan bir ad C ve getir AAA ve BBB olarak bu ad ile anahtar kelime kullanarak.

Sonuç

Ad. Dersleri için.

C her kavram farklı şekilde tasarlanmıştır ve farklı kullanılır, farklı durumlarda, farklı sorunlara çözüm olarak.

Ad ihtiyacınız olduğunda sınıfları kullanmayın.

Ve sizin durumunuzda, ad gerekir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • LiquidMusick

    LiquidMusick

    23 Aralık 2010