C ++ | Перегрузка функций и аргументы по умолчанию | Вопрос 4
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
Тест на этот вопрос