Sanal işlevler satır içinde olması gerektiğini söyleyerek bir kod inceleme yorum aldığımda bu soruyu aldım.
Satır içi sanal işlevlerin, işlevlerin doğrudan nesneler üzerinde çağrıldığı senaryolarda kullanışlı olabileceğini düşündüm. Ama aklıma gelen karşı argüman - neden sanal tanımlamak ve sonra yöntemleri çağırmak için nesneleri kullanmak istesin ki?
Neredeyse hiç genişletilmedikleri için satır içi sanal işlevleri kullanmamak en iyisidir?
Analiz için kullandığım kod snippet'i:
class Temp
{
public:
virtual ~Temp()
{
}
virtual void myVirtualFunction() const
{
cout<<"Temp::myVirtualFunction"<<endl;
}
};
class TempDerived : public Temp
{
public:
void myVirtualFunction() const
{
cout<<"TempDerived::myVirtualFunction"<<endl;
}
};
int main(void)
{
TempDerived aDerivedObj;
//Compiler thinks it's safe to expand the virtual functions
aDerivedObj.myVirtualFunction();
//type of object Temp points to is always known;
//does compiler still expand virtual functions?
//I doubt compiler would be this much intelligent!
Temp* pTemp = &aDerivedObj;
pTemp->myVirtualFunction();
return 0;
}
pTemp->myVirtualFunction()
sanal olmayan çağrı olarak çözülebileceğine işaret edebiliyorsa , bu çağrıyı yerinde yapabilir. Başvurulan bu çağrı g ++ 3.4.2 ile işaretlenmiştir: TempDerived & pTemp = aDerivedObj; pTemp.myVirtualFunction();
Kodunuz değildir.