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:
- Bu fonksiyonlar yazmak
MyMath
benim ad koydum veMyMath::XYZ()
), onlara bakın - Bir sınıf
MyMath
oluşturun ve bu yöntemler statik ve benzerMyMath::XYZ()
bakın
Neden benim yazılım düzenleme aracı olarak diğer üzerinden bir tercih yapayım?
CEVAP
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.
Neden PHP 5.2 soyut sınıf statik yönte...
Bir sınıf statik alanlar ve yöntemler ...
Non-senkronize statik yöntemler parçac...
Java senkronize statik yöntemler: nesn...
Statik Sınıf Objective C Düzeyi değişk...