C++ uygulamasında, bir temel sınıfın üye işlevi, prototip (parametrelerin sayısı, türü ve sıkılığı) farklı olsa bile, aynı adda türetilmiş sınıf işleviyle geçersiz kılınır mı? Bu çok saçma bir soru sanırım, çünkü birçok web sitesi, işlev prototipinin gerçekleşmesi için aynı olması gerektiğini söylüyor; ancak aşağıdaki kod neden derlenmiyor? Çok basit bir miras davası, inanıyorum.C++ devralma ve işlev geçersiz kılma
#include <iostream>
using std::cout;
using std::endl;
class A {};
class B {};
class X
{
public:
void spray(A&)
{
cout << "Class A" << endl;
}
};
class Y : public X
{
public:
void spray(B&)
{
cout << "Class B" << endl;
}
};
int main()
{
A a;
B b;
Y y;
y.spray(a);
y.spray(b);
return 0;
}
GCC yüzden 'gizleme' denir
error: no matching function for call to `Y::spray(A&)'
note: candidates are: void Y::spray(B&)
Bazılarının gerektirmesi durumunda ayrıntılı bir açıklama için aynı sorun hakkında yazan C++ SSS'i aldınız :) http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq- 23.9 – legends2k
İmzaların aynı olması gerektiğini söylemek biraz tehlikelidir. İmzalar isimlendirme ve bağlamanın temelidir. Farklı sınıfların iki üyesi, biri diğerini geçersiz kılsa bile, her zaman farklı imzalara sahiptir. Söylemek daha uzun olsa bile, "aynı parametre türleri, isimler ve kabızlık" demek daha iyidir. –
@litb: Netleştirmek için teşekkürler! Sanırım 'prototip' burada uygun kelimedir, ben bunu değiştirdim :) – legends2k