olmadan işlev mümkündür Geçti parametrelerin türü, değişen parametre sayısı, dönüş türü vb. Gibi çeşitli aşırı yükleme yöntemlerine rastladım. Aşağıdaki iki işlevi takip eden bir fonksiyonu aşırı yükleyiniz. Lütfen aşağıdaki iki işlevi yerine getiriniz.Fonksiyonun iki versiyonu ile yüklenebilir, sabit üye fonksiyonu ve const
cevap
Evet yapabilirsiniz. Eğer
MyClass m;
m.doSomething();
varsa
const olmayan versiyonu çağrılır. Hepsini aç Hepsini kapa Bu Sayfada Belirtiler const sürümü çağrılacak.
Evet, bunu yapabilirsiniz. (@Job, bu geri dönüş türünde aşırı yüklenme değil, bu çağrılan sınıf örneğinin 'const-state' kısmında aşırı yüktür)
Örnek const ise, ikinci varyant çağrılacaksa İlk denir. pratik kullanım yöntemi const örneğinde denir, muhtemelen de dönmek istiyorum olmasıdır "const dize &" (örneğin sınıfın bir üyesi bir başvuru dönerseniz) bunun gibi,:
//function which can modify member
String& MyClass::doSomething();
//constant member function
const String& MyClass::doSomething() const;
Sorunun dönüş türünde aşırı yüklenmeyle ilgili olmadığını biliyorum, ancak sorusuna, bunun mümkün olduğunu düşündüğünden bahsetmişti. – Job
Bu yalnızca yaygın olarak kullanılan bir deyim olarak mümkün değildir. Örneğin, bir işlevin const
sürümü çağrılırsa, bir sonucun salt okunur sürümüne yapılan bir başvuru döndürülür. Örneğin,Ancak, const
sürümü kullanılmazsa, alıcının değiştirebileceği bir kopya oluşturulur ve döndürülür. Bir const
versiyonunu uygulayarak, gerekli olmayacağını bildiğimizde inşaatı yapmaktan kurtulduk.
bu anlamak kolay şekilde, 0 parametre olarak üzerinde yöntemini çağırarak nesnenin düşünmektir bir fantezi olarak
String& MyClass::doSomething();
MyClass mc;
mc.doSomething();
düşünün, derleyici desteklenen yolu bunu yapmanın: constness dayalı aşırı yüklenmesini, Şimdi
String& MyClass_doSomething(MyClass *this);
MyClass mc;
MyClass_doSomething(&mc);
parametre türlerine göre aşırı sadece özel bir durumdur:
String& MyClass::doSomething();
String& MyClass::doSomething() const;
düşüncesi ile böyle bir şey olarak yapabilirsiniz: Bu üzerindeki yararı gelince
String& MyClass_doSomething(MyClass *this);
String& MyClass_doSomething(const MyClass *this);
, en kolay örnekler çeşitli std::
konteynerlerin üzerinde begin
ve end
yöntemlerdir. vector
/string
/n olmayan bir şey varsa ve begin()
numaralı telefonu çağırırsanız, orijinal kabın içeriğini değiştirmek için kullanılabilecek bir iterator
geri alırsınız.Açıkça, bu, const
işaretli kaplar için izin verilmemelidir, bu nedenle, const/const olmayan aşırı yüklenme sayesinde, bir const vektöründe begin()
numaralı çağrı, vektörün içeriğini okumak için kullanılan, ancak değiştirilemeyen bir const_iterator
döndürür.
örn.
string nc = "Hello world";
for (string::iterator iString = nc.begin(); iString != nc.end(); ++iString)
{
cout << *iString;; // legal to read
*iString = toupper(*iString); // legal to write
}
const string c = "Hello world again";
for (string::const_iterator iString = c.begin(); iString != c.end(); ++iString)
{
cout << *iString;; // legal to read
// *iString = toupper(*iString); // Writing is illegal
}
Döndürme türüne göre aşırı yükleme yapmak için, C++ içinde yapamazsınız. Ancak, simulate it oldukça iyi bir şekilde yapabilirsiniz.
Yineleyici bu şekilde kullanılır. Bir const yineleyici yanı sıra bir const yineleyici var.
- 1. PHP - fonksiyonun sabit değerini sınıf sabitine atayın
- 2. const referans nitelikli eleman fonksiyonu
- 3. Bir üye fonksiyonu fonksiyona bağlanma
- 4. çıkarılmış iki fonksiyonun fzero
- 5. Aynı kod tabanına sahip ancak aynı imzaya sahip iki sürümden oluşan iki versiyonu yüklemek
- 6. üye olmayan işlev cv-eleme
- 7. Şablonlar ve sabit dizeler
- 8. Arama, const olmayan aynı sürüm aşırı yüklenmiş üye işlevinden olduğunda const niteleyiciyi kaldırmak tamam mı? Örneğin
- 9. Üye fonksiyonu yazarak yardımcısı şablon sınıfları ile basitleştirilebilir mi?
- 10. çağrılması işaretçi-için-üye fonksiyonu C++
- 11. Templated şablonu sınıfındaki fonksiyonun
- 12. const vs new const
- 13. Sabit iki sol sütun ve başlık
- 14. const char * ve kömür *
- 15. const nesne ve const yapıcı
- 16. const ve const {} in javascript
- 17. kullanın fonksiyonu parametre: Ek açıklama argümanı sabit
- 18. Bir fonksiyonun kapatılması
- 19. App Engine versiyonu tutarsız ve
- 20. C++ İmza ve üye ile üye işlevine işaretçi şablonları
- 21. İki fonksiyonun eşitliğini test etme R
- 22. Raylar Sunucu - başlatılmamış sabit dişlisi :: Raylar :: VERSİYONU (NameError)
- 23. İki (junit) test fonksiyonu yaratın
- 24. Undocumented üye
- 25. C++ aşırı yük operatörü iki kez, bir const olmayan const başvuru ve diğer const referansı, tercih nedir?
- 26. "extern const" ile "extern" sadece
- 27. 'auto const' ve 'const auto' aynı mı?
- 28. Herhangi bir const üye işleviyle herhangi birini boost type_erasure
- 29. const olmayan işaretçi argümanı bir const çift işaretçi parametresiyle
- 30. tembel versiyonu
Hangi dili kullanıyorsunuz? Doğru dikkati çekmek istiyorsanız soruyu dil ile etiketlemelisiniz. – Oded
edited, dili kullanıyorum C++ –
C++ cinsinden geri dönüş türüne aşırı yükleyemezsiniz. – Job