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

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

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

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

05.12.2013, 12:10. Просмотров 638. Ответов 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     Виртуальные функции с одинаковым именем и разным набором аргументов
Посмотрите здесь:

GCC компилируе с разным набором параметров - C++
Всем привет! Нашел в интернете курс для новичков по C++. В нем предлагается изучать его используя компилятор GCC, чтобы прочувствовать...

две переменные с одинаковым именем - C++
Вопрос скорее теоретический: Использую Visual C++ , запускаю debug и в окошечке переменных вижу, например, две переменные с именем i....

Задание нескольких #region с одинаковым именем. Нормально ли это? - C++
Могу ли я указывать несколько #region с одинаковыми именами в рамках одного файла или в рамках некоторого проекта. Не противоречит ли это...

Инициализация переменных с разным именем в цикле - C++
Добрый день, по сути весь вопрос написан в заголовке, нужно с каждой итерацией создавать новую переменную

виртуальные и чисто виртуальные функции - C++
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто виртуальную? #include <iostream> using...

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? - C++
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово:) Конкретно. Есть функция void jacobi (...

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

Виртуальные функции - C++
#include <iostream> #include <string> #include <string.h> #include <conio.h> using namespace std; class Array { ...

Виртуальные функции - C++
Какие происходят изменения, когда в классе объявляем одну или несколько функций виртуальными? Вот, например, если в SuperClass перед...

виртуальные функции - C++
C++ подскажите пожалуста на словах код писать ненадо. как преопределить функцию virtual Print(). Создать абстрактный базовый класс...

Виртуальные функции - C++
Разработать программу с использованием наследования классов, реализующую классы: Земноводное(ареал обитания)->Крокодил(род, длина, вес) ...

виртуальные функции - C++
Всем привет, помогите с исправлением функции #include<iostream.h> #include<conio.h> #include<string.h> enum...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1039 / 702 / 102
Регистрация: 12.04.2010
Сообщений: 1,766
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!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 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     Виртуальные функции с одинаковым именем и разным набором аргументов
Ответ Создать тему
Опции темы

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