Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
#1

Виртуальные функции с одинаковым именем и разным набором аргументов - C++

05.12.2013, 12:10. Просмотров 586. Ответов 5
Метки нет (Все метки)

Есть абстрактный базовый класс и пара наследников.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Base
{
public:
  vurtual void Func(int a); 
  vurtual void Func(int a, int b);
};
 
class ChildA : public Base
{
public:
  void Func(int a);
}
 
class ChildB : public Base
{
public:
  void Func(int a, int b);
}
Компилятор при такой структуре выдает предупреждения, но компиляция проходит.
W8022 'ChildA::Func(int a)' hides virtual function 'Base::Func(int a, int b)'
W8022 'ChildB::Func(int a, int b)' hides virtual function 'Base::Func(int a)'
Функции дочерних классов прячут виртуальные функции абстрактного базового. Что это означает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 12:10     Виртуальные функции с одинаковым именем и разным набором аргументов
Посмотрите здесь:

C++ две переменные с одинаковым именем
Виртуальные функции. C++
Виртуальные функции C++
C++ виртуальные функции
Виртуальные функции C++
C++ Виртуальные функции
Виртуальные функции C++
Составить программу для решения ребуса : КОТ + КОТ = ТОК, где разным буквам соответствуют разные цифры, одинаковым - одинаковые C++
C++ виртуальные функции
виртуальные функции C++
C++ GCC компилируе с разным набором параметров
Задание нескольких #region с одинаковым именем. Нормально ли это? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
05.12.2013, 12:43     Виртуальные функции с одинаковым именем и разным набором аргументов #2
Цитата Сообщение от Нитонисе Посмотреть сообщение
Есть абстрактный базовый класс и пара наследников.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Base
{
public:
  vurtual void Func(int a); 
  vurtual void Func(int a, int b);
};
 
class ChildA : public Base
{
public:
  void Func(int a);
}
 
class ChildB : public Base
{
public:
  void Func(int a, int b);
}
Компилятор при такой структуре выдает предупреждения, но компиляция проходит.


Функции дочерних классов прячут виртуальные функции абстрактного базового. Что это означает?
Скорее всего у вас выставлены какие то параметры компиляции, что реагирует на это. Но это только предположение.
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
05.12.2013, 13:21  [ТС]     Виртуальные функции с одинаковым именем и разным набором аргументов #3
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Скорее всего у вас выставлены какие то параметры компиляции, что реагирует на это. Но это только предположение.
То есть мои классы должны работать нормально без сюрпризов?
Alex5
1017 / 680 / 99
Регистрация: 12.04.2010
Сообщений: 1,714
05.12.2013, 13:35     Виртуальные функции с одинаковым именем и разным набором аргументов #4
Цитата Сообщение от Нитонисе Посмотреть сообщение
Функции дочерних классов прячут виртуальные функции абстрактного базового. Что это означает?
Это означает, что попытка вызвать Func(int,int) для объекта ChildA приведёт к ошибке компиляции.
Нужно будет явно указать Base::Func(). См. пример.
C++
1
2
3
    ChildA a;
    a.Func( 11, 22 );  /* ошибка компиляции  error C2660: ChildA::Func: функция не принимает 2 аргументов */
    a.Base::Func( 11, 22 ); /* ok  */
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
05.12.2013, 13:48  [ТС]     Виртуальные функции с одинаковым именем и разным набором аргументов #5
Цитата Сообщение от Alex5 Посмотреть сообщение
Это означает, что попытка вызвать Func(int,int) для объекта ChildA приведёт к ошибке компиляции.
Нужно будет явно указать Base::Func(). См. пример.
А, тогда ясно. Просто для класса ChildA не будет реализации функции с двумя аргументами - она там не нужна. Тогда по идее и ошибок не будет.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
05.12.2013, 14:39     Виртуальные функции с одинаковым именем и разным набором аргументов #6
Достаточно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class ChildA : public Base
{
public:
  using Base::Func;
  void Func(int a);
}
 
class ChildB : public Base
{
public:
  using Base::Func;
  void Func(int a, int b);
}
Yandex
Объявления
05.12.2013, 14:39     Виртуальные функции с одинаковым именем и разным набором аргументов
Ответ Создать тему
Опции темы

Текущее время: 22:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru