C ++ | Перегрузка функций и аргументы по умолчанию | Вопрос 4

Опубликовано: 4 Марта, 2022

Predict the output of following C++ program.

include<iostream>
using namespace std;
   
class Test
{
protected:
    int x;
public:
    Test (int i):x(i) { }
    void fun() const  { cout << "fun() const " << endl; }
    void fun()        {  cout << "fun() " << endl;     }
};
   
int main()
{
    Test t1 (10);
    const Test t2 (20);
    t1.fun();
    t2.fun();
    return 0;
}

(A) Ошибка компилятора
(B) веселье ()
fun () const

(C) fun () const
fun () const

(D) веселье ()
веселье()



Ответ: (B)

Объяснение: Два метода void fun () const и void fun () имеют одинаковую сигнатуру, за исключением того, что один - const, а другой - нет. Кроме того, если мы внимательно посмотрим на вывод, мы заметим, что 'const void fun ()' вызывается для объекта const, а 'void fun ()' вызывается для неконстантного объекта.
C ++ позволяет перегружать методы-члены на основе константного типа. Перегрузка на основе константного типа может быть полезна, когда функция возвращает ссылку или указатель. Мы можем сделать одну функцию константной, которая возвращает ссылку на константу или константный указатель, другую неконстантную функцию, которая возвращает неконстантную ссылку или указатель. Подробнее см. Ниже.

Перегрузка функций и ключевое слово const

Тест на этот вопрос

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с Базовым курсом C для базового и продвинутого C.