আমার ভার্চুয়াল ফাংশন সহ একটি বেস ক্লাস রয়েছে এবং আমি এই ফাংশনটি একটি উত্পন্ন ক্লাসে ওভাররাইড করতে চাই। সংকলক চেক করার কোনও উপায় আছে কি আমি ডেরাইভড ক্লাসে ঘোষিত ফাংশনটি বেস ক্লাসে কোনও ফাংশনকে ওভাররাইড করে কিনা? আমি এমন কিছু ম্যাক্রো বা এমন কিছু যুক্ত করতে চাই যা পুরানোটিকে ওভাররাইড না করে দুর্ঘটনাক্রমে কোনও নতুন ফাংশন ঘোষণা করিনি তা নিশ্চিত করে।
এই উদাহরণটি ধরুন:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
এখানে parent::handle_event()
পরিবর্তে বলা হয় child::handle_event()
, কারণ সন্তানের পদ্ধতিটি const
ঘোষণাকে বাদ দেয় এবং তাই একটি নতুন পদ্ধতি ঘোষণা করে। এটি ফাংশন নামের একটি টাইপও হতে পারে বা পরামিতিগুলির ধরণের মধ্যে কিছু ছোট পার্থক্য difference বেস ক্লাসের ইন্টারফেস পরিবর্তিত হয় এবং কোথাও কোথাও প্রাপ্ত কিছু শ্রেণীর পরিবর্তনটি প্রতিবিম্বিত করতে আপডেট না করা হলে এটি সহজেই ঘটতে পারে।
এই সমস্যা এড়ানোর কোনও উপায় আছে কি, আমি কি আমার কাছে এটি পরীক্ষা করার জন্য কোনওভাবে সংকলক বা অন্য কোনও সরঞ্জাম বলতে পারি? কোনও সহায়ক সংকলক পতাকা (সাধারণত জি ++ এর জন্য)? কীভাবে আপনি এই সমস্যাগুলি এড়াতে পারেন?