هیچ مشکلی ایجاد نمی کرد و هنگام فراخوانی کلاس Derived::some_func تابعی که در کلاس پایه تعریف شده است برخلاف انتظار برنامه نویس فراخوانی نخواهد شد و به صورت یک سربار گذاری در نظر گرفته خواهد شد.
که در استاندارد جدید این مشکل برطرف گردیده
struct Base {
virtual void some_func(float);
};
struct Derived : Base {
virtual void some_func(int) override; // ill-formed - doesn't override a base class method
};
Lambda
این نوع توابع که در اکثر زبان های مدرن امروزی موجود هستند می توانند ابزار جالبی برای برنامه نویسی و ایجاد توابع دم دستی باشد .در استاندارد جدید این نوع توابع که از نوع std::function هستند را می توان مورد استفاده قرار داد .
در مثال زیر یک تابع برای بدست اوردن سری فیبوناپی به این روش تعریف شده است
std::function<int(int)> lfib = [&lfib](int n) {return n < 2 ? 1 : lfib(n-1) + lfib(n-2);};
شیوه کلی تعریف به این صورت است
[capture](parameters)->return-type {body}
capture : مشخص کننده نام مورد نظر است
parameters : پارامتر های ورودی
return type: نوع بازگشتی
و دستورات بدنه نیز در داخل {} جای خواهند گرفت
مثال زیر نحوه استفاده از این نوع توابع را بازگو می کند که کل عناصر یک آرایه را به شکل بزرگ آن تبدیل می کند
int main()
{
char s[]="Hello World!";
int Uppercase = 0; //modified by the lambda
for_each(s, s+sizeof(s), [&Uppercase] (char c) {
if (isupper(c))
Uppercase++;
});
cout<< Uppercase<<" uppercase letters in: "<< s<<endl;
}