переопределение виртуальной функции c ++ - PullRequest
1 голос
/ 26 мая 2011

даже я думаю, что вопрос глупый.но у меня есть небольшой опыт.

У меня есть базовый класс с таким методом:

class A{  virtual void func(int)=0 };

и унаследованный класс

    class  B :public A
  {  
     //how should i write?
    //a  
       virtual void func() {    implementation...}  

    //b
      void func() {implementation    } 
   //my target is to redefine a function of ansestor
 //i worry that variant b can  cover ansestor function and i will not redefine it
 //but what if i don't want that the function that was virtual in ansestor, will   be      virtual in subclass? 
i'm confused
}

Я не знаю, что делатьесли мне не нужна эта виртуальная функция завершена

Ответы [ 4 ]

4 голосов
/ 26 мая 2011

Вы спрашиваете: «Что если я не хочу, чтобы функция, которая была виртуальной в ansestor, была виртуальной в подклассе?»

Извините, но каждая функция, объявленная virtual в базекласс, также является виртуальным во всех производных классах.

На самом деле не имеет значения, используете ли вы ключевое слово virtual в объявлении производного класса.Параметры a и b идентичны - в обоих случаях B::func является виртуальным.

2 голосов
/ 26 мая 2011

Я предлагаю вам написать две небольшие программы, по одной для каждой реализации, чтобы определить, что соответствует вашим потребностям.

1 голос
/ 26 мая 2011

Виртуальный означает, что переопределение возможно в унаследованном классе (ах).Виртуальная функция всегда будет виртуальной независимо от глубины наследования.

1 голос
/ 26 мая 2011

В C ++ сигнатура функции состоит из имени функции и аргументов функции.В классе не может быть двух функций с одинаковой сигнатурой.Таким образом, ваше второе (не виртуальное) объявление функции вызовет ошибки компилятора.

Короче:

virtual void func() { //implementation}

и

void func() { //implementation }

имеют одинаковую подпись и не могутобъявлен в том же классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...