Kodumda, bir nesnenin boş/boş olup olmadığını kontrol etmeyi kontrol ediyorum. Nesneyi null olarak ayarlamanın bir yolu var mı?Bir nesneyi null olarak ayarlamak mümkün mü?
cevap
Sınıfın nesnesi NULL olarak ayarlanamaz; Ancak, bir işaretçiyi (bir nesnenin bir hafıza adresini içeren) NULL olarak ayarlayabilirsiniz.
yapamayacağınız şeylerin Örnek hangi soruyorsun: Eğer yapabileceklerinizin
Cat c;
c = NULL;//Compiling error
Örnek: NULL
basitçe olsa
Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
kim getirmek istiyorsa bir yana, evet operatöre aşırı yükleyebilirsiniz = ancak bu OP değil istiyor. –
İlk, “Cat :: operator = (...)' ile çalışabilir. Her neyse, OP gerçekten bir işaretçiyi kontrol etmek istiyor gibi görünüyor. Yani, +1. – jweyrich
@jweyrich: Birisinin bunu söylemesinden önce yorumumu görebileceğini anladım :) –
Sen NULL
herhangi işaretçi ayarlayabilirsiniz C++ 0 olarak tanımlanır:
myObject *foo = NULL;
dadikkat, standart üstbilgileri dahil ederseniz, ancak dilin kendisinde yerleşik değilse tanımlanır. NULL
tanımsız, bunun yerine 0 kullanabilir veya bu içerebilir: Bir As
#ifndef NULL
#define NULL 0
#endif
kenara, gerçekten NULL
için, bir nesne değil, bir işaretçi ayarlamak istiyorsanız, Null Object Pattern okuyabilirsiniz.
Nesnenin boş/boş olup olmadığını kontrol etmek istersiniz. Boş ve boş olmaları aynı değildir. Justin ve Brian'ın daha önce de bahsettiği gibi, C++ NULL öğesinde, tipik olarak işaretçilerle ilişkilendireceğiniz bir ödevdir. Operatörü aşırı yükleyebilirsiniz = belki de bunu yapmak istiyorsanız gerçekten iyi düşünün. Diğer şeyler:
- C++ NULL işaretçisinde 'boş' nesnesini işaret eden işaretçiden çok farklıdır.
- Neden bir nesnenin değişkenleri varsayılan durumuna sıfırlanırsa true değerini döndüren bir
bool IsEmpty()
yöntemine sahip değil misiniz? Sanırım NULL kullanımını atlayabilir. A* p = new A; ... p = NULL;
gibi bir şey olması, kodunuzun çöp toplanacağından emin olmadığınız sürece kötüdür (silme yok). Bir şey varsa, bu durum bellek sızıntılarına ve bu türden birkaç sızıntıya yol açacaksa, iyi bir şansınız olacaktır.- Bunu yapmak için
class Null {}; Null _NULL;
ve daha sonra operatörünüze = ve operatör! = Durumunuza bağlı olarak diğer sınıflar yüklenebilir.
Belki bir nesne C++ "/ boş boş" olamaz seçeneği 4.
Arpan
"Neden bir Boole IsEmpty() yöntemine sahip değilsiniz ..." - bazı iyi nedenler yoktur. En önemlisi, mantıklı olup olmadığının tipik olarak bağlamsal olması. Daha güçlü bir çözüm, geçerli bir T nesnesine sahip olup olmadığınızı belirtmek için 'boost :: isteğe bağlı
o doğru olmakla birlikte daha size yardımcı olmak için bağlam hakkında bize bazı ayrıntıları gönderilmesi gerekiyor, C++ 17'de, bu amacı belirtmek için std::optional
aldık.
örnek kullanım: optional
v1.has_value(); // false
veya
if(v2) {
// You get here if v2 is not empty
}
bir düz int
(veya herhangi bir tür) bir değer içeriyorsa,
std::optional<int> v1; // "empty" int
std::optional<int> v2(3); // Not empty, "contains a 3"
Ardından, ancak kontrol edebilir Herhangi bir kullanımda asla "null" veya "boş" (bu sözcüklerin tanımına göre) olamaz ul duyu. Bu bağlamda std::optional
'u bir kap olarak düşünün.
Elinizde C++ 17 uyumlu bir derleyiciniz yoksa, bunun yerine boost.optional'u kullanabilirsiniz. Bazı pre-C++ 17 derleyicileri de en az std::optional
afaik'e yakın davranacak olan std::experimental::optional
'u sunar. Ayrıntılar için derleyici kılavuzuna bakın.
veya 'std :: experimental :: optional 'komutunu çağırırsanız, derleyiciniz bunu sağlar. –
@JonathanWakely İyi nokta, bunu ekledi. Teşekkürler! –
Ne tür bir nesne?
NULL
(ve nullptr
) işaretçi türlerinin nesnelerine kesinlikle atayabilirsiniz ve aritmetik türlerin nesnelerine NULL
atayabiliyorsanız uygulama tanımlanmıştır. Bazı sınıf türündeki nesneleri kastediyorsan
, cevap
"boş", gibi birçok çeşit daha makul olması kopya atama hem de HAYIR (operator=
kabul işaretçi veya aritmetik türleri vardır hariç sınıflar) ise varsayılan yapım (genellikle zımnen). Varsayılan bir tane inşa gibi olan mevcut bir nesne, ayrıca gerekecektir olmadığını görmek için, uygun bir bool operator==
- 1. Başlıkları koşullu olarak ayarlamak mümkün mü?
- 2. XAML'de denetimleri seçici olarak etkileyen bir stil ayarlamak mümkün mü?
- 3. UIButton'da hedef olarak bir blok ayarlamak mümkün mü?
- 4. Bir görünüme birincil anahtar ayarlamak mümkün mü?
- 5. Ansible'da bir dizinin gerçekliğini ayarlamak mümkün mü?
- 6. 2 tip nesneyi Restsharp'a geçirmek mümkün mü?
- 7. Android'de sched_setaffinity ile yakınlık ayarlamak mümkün mü?
- 8. Vardiya ve kontrol tuşlarının durumunu programlı olarak ayarlamak mümkün mü?
- 9. Range nesnesini "geriye doğru seçim" olarak ayarlamak mümkün mü?
- 10. Anonim işlevlerde kesme noktası ayarlamak mümkün mü?
- 11. ImageImage'ı displayImage() ile ayarlamak mümkün mü?
- 12. ReactJS'de bir tablo hücresinde bir CSSTransitionGroup ayarlamak mümkün mü?
- 13. ASP.NET'te bir oturum ayarlamak için uyumsuz çağrı çalıştırmak mümkün mü?
- 14. Bir .sublime-project dosyasında ortam değişkenleri ayarlamak mümkün mü?
- 15. C#: LINQ kullanarak sınıf kurucusunda bir nesneyi başlatmak mümkün mü?
- 16. Redis pubsub'da, bir nesneyi PUBLISH komutuna iletmek mümkün mü?
- 17. iPhone'u programlı olarak kapatmak mümkün mü?
- 18. jgitflow Sürüm başlangıcında son sürümü ayarlamak mümkün mü
- 19. Her iki nesneyi bilmeden bir nesneyi 2. nesnenin türüne dökmek mümkün mü?
- 20. ? mümkün mü?
- 21. 7 gün boyunca aynı anda alarmı ayarlamak mümkün mü?
- 22. Bir resmi tuvalsiz olarak pikselleştirmek mümkün mü?
- 23. Dinamik olarak bir UITextView oluşturmak mümkün mü?
- 24. Django - ManyToManyField bir modelde null olarak ayarlanıyor?
- 25. SQL Server'ın NewId() öğesine sütun varsayılanını ayarlamak mümkün mü?
- 26. Java kullanarak dosyalara özel meta veriler ayarlamak mümkün mü?
- 27. AutoFixture SemanticComparison'da belirtilen türdeki özel karşılaştırıcıyı ayarlamak mümkün mü
- 28. localhost'u Stripe webhook URL'si olarak ayarlamak mümkün müdür?
- 29. Enum imzasız char için varsayılan tür ayarlamak mümkün mü?
- 30. CSS özelliklerini kimlik önekine göre ayarlamak mümkün mü?
Sen (siz null işaret olmadığını kontrol etmek istediğinizde veya yok senin terminoloji konusunda dikkatli olmalıdır nesne eğer kendisi null?) Yönetilen bir dilden geliyormuşsunuz gibi geliyor. C++ nesneleri asla boş veya boş olamaz. İşaretçiler, hiçbir şeye işaret etmediklerini gösteren boş bir işaretçi değeri tutabilir. Referanslar her zaman bir nesneye başvurur. Kendini başka dillerden gelen bilgilerle öğretmeyi denemem, kendini inciteceksin. Yeni başlayanlar için iyi bir kitap tut, öğrenmenin en iyi yolu. http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – GManNickG