Bir projede "devingen" olarak uygulanan "özel miras" kullanıyorum. Temel sınıf, operatör [] 'i tanımlar ve kullanmak istediğim işlev budur. Bu nedenle, operatörün hangi sürümünün [] aldığını nasıl kontrol edebilirim? Aslında, birden fazla, hem de const
ve const
sürümlerine ihtiyacım var. Bu başarılabilir mi?Yönerge, aşırı yüklenmeler kullanarak özel miras mı?
cevap
Anlayışım, using
ürününüzün, operatörün tüm farklı aşırı yüklenmelerini otomatik olarak getirmesidir. Çocuk sınıfına getirilmekten kaçınmak istediğiniz bazı aşırı yüklenmeler var mı? Bu durumda, işi ebeveynde birkaç farklı isimlendirilmiş fonksiyona bölmek ve ihtiyacınız olan sadece using
olmak daha iyi olabilir.
Ben de öyle düşünmüştüm, ama hem T hem de T yapısını döndüren versiyonlar olmasına rağmen derleme hatalarından derleme hataları alıyorum T ('' tip typename T) – carlpett
Yani, bu onlardan biri 'sihirli olarak kendini kurtardı "times ... Kodları inceledikten ve yeniden derledikten sonra, aniden çalışır ve hayatımın değişmesi için ne değiştirdiğimi anlayamıyorum. Değişim ne oldu da miras hakkında biraz daha fazla şey öğrendim, teşekkürler! – carlpett
Bu beklendiği gibi yapar: Başka bir deyişle
class A
{
public:
int operator[](int idx) { return 0; }
int operator[](int idx) const { return 1; }
};
class B : public A
{
public:
using A::operator[];
void opa() { cout << operator[](1) << endl; }
void opb() const { cout << operator[](1) << endl; }
};
int main(void)
{
B b;
b.opa();
b.opb();
const B d = B();
cout << d[1] << endl; // should trigger the const version of operator[]
return 0;
}
uygun const/olmayan const versiyonları B
içine enjekte edilir. Not: const sürümü sağlanmazsa, bir derleyici hatası alırsınız (bu, mirasın özel mi yoksa genel mi olduğunu belirler).
- 1. C# XML yorumlarındaki aşırı yüklenmeler/gruplar nasıl bağlanır?
- 2. Nerede ve Seçimlerde (T, int) aşırı yüklenmeler için bir LINQ sözdizimi var mı?
- 3. PostgreSQL miras mı?
- 4. Özel yönerge için geçiş parametresi
- 5. Özel bir içsel iç şablon, bir yönerge
- 6. Özel miras: ad arama hatası
- 7. Django'da yabancı temel miras mı?
- 8. Yöngüdümlü yönerge
- 9. Yönerge
- 10. Yönerge
- 11. Sınıf aşırı yüklenenler ise miras alınan TObject yapıcısını nasıl gizlerim?
- 12. Neden özel miras kapsamında geçersiz kılın?
- 13. Özel angularjs yönerge: Şablondaki yönergelerin sayısını en aza indirmeli miyim?
- 14. Harita miras
- 15. Modeli kullanıcı türleri olarak özel bir açısal yönerge olarak değiştir
- 16. BufferedWriter ve BufferedOutputStream birlikte kullanmak aşırı mı?
- 17. Typescript'in Operatör Aşırı Yüklemesi var mı?
- 18. Python'da + = aşırı yüklenmenin bir yolu var mı?
- 19. çözülebilir - miras
- 20. yönerge şu var
- 21. Özel HTML ile yönlendirme yönergesi (başka bir yönerge)
- 22. AngularJS TypeScript yönerge bağlantı işlevi
- 23. birden miras
- 24. Fonksiyon aşırı yük kullanarak lambda fonksiyonu imza
- 25. Açık türetme neden özel miras için öngörüye izin veriyor?
- 26. Miras ve kopya kurucu - özel alanların temel sınıftan nasıl başlatılacağı?
- 27. $ kapsam değişkeni, yönerge kapsamı
- 28. Açısal yönerge görüntülenmiyor
- 29. angularjs: Bir yönerge
- 30. Python'da aşırı yük() operatörü
Bu durumda, özel miras yerine istediğiniz sonucu vermek için kompozisyon kullanabilirsiniz. – James
Evet, biliyorum ... Yönlendirme kodunun miktarını azaltmak yerine onu özel mirasa dönüştürdüm. Yani bu mümkün değil mi? Fonksiyon nasıl seçilir? – carlpett
Burada özel bir miras yerine kompozisyon kullanıyorsanız, kodunuzun yazılması ve bakımı daha kolay olacaktır. Başparmak kuralı, kesinlikle gerekli olmadıkları zaman, C++ 'nın duvar dışı özelliklerini kullanmamaktır (şimdiye kadar söylediklerinizden, bu durumda özel mirasa gerek yoktur). –