আমি এই প্রশ্নটি পেয়েছি যখন আমি একটি কোড পর্যালোচনা মন্তব্য পেয়েছিলাম যাতে বলে ভার্চুয়াল ফাংশনগুলি ইনলাইন হওয়া উচিত নয়।
আমি ভেবেছিলাম যে ইনলাইন ভার্চুয়াল ফাংশনগুলি এমন পরিস্থিতিতে দেখা যায় যেখানে ফাংশনগুলিকে সরাসরি বস্তুগুলিতে ডাকা হয়। তবে পাল্টা যুক্তিটি আমার মনে এলো - কেন কেউ ভার্চুয়ালকে সংজ্ঞায়িত করতে এবং তারপরে পদ্ধতিগুলি কল করতে অবজেক্টগুলি ব্যবহার করতে চায়?
ইনলাইন ভার্চুয়াল ফাংশনগুলি না ব্যবহার করা কি ভাল, যেহেতু সেগুলি প্রায় কোনওভাবেই প্রসারিত হয় না?
কোড স্নিপেট আমি বিশ্লেষণের জন্য ব্যবহার করেছি:
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()
অ-ভার্চুয়াল কল হিসাবে সমাধান করা যেতে পারে তবে এটির কলটি ইনলাইন থাকতে পারে। এই রেফারেন্সড কলটি জি ++ 3.4.2 দ্বারা অন্তর্ভুক্ত রয়েছে: TempDerived & pTemp = aDerivedObj; pTemp.myVirtualFunction();
আপনার কোডটি নয়।