Рубрики

Чем отличается виртуальное поведение по умолчанию в C ++ и Java?

Виртуальное поведение методов по умолчанию противоположно в C ++ и Java:

В C ++ методы членов класса по умолчанию не являются виртуальными. Их можно сделать виртуальными, используя ключевое слово virtual . Например, Base :: show () не является виртуальной в следующей программе, и программа выводит «Base :: show () selected») .

#include<iostream>

  

using namespace std;

  

class Base {

public:      

  

    // не виртуальный по умолчанию

    void show() {  

         cout<<"Base::show() called";

    }

};

  

class Derived: public Base {

public:      

    void show() {

         cout<<"Derived::show() called";

    }      

};

  

int main()

{

  Derived d;

  Base &b = d;   

  b.show(); 

  getchar();

  return 0;

}

Добавление виртуального до определения Base :: show () заставляет программу печатать «Derived :: show () call»

В Java методы являются виртуальными по умолчанию и могут быть сделаны не виртуальными, используя ключевое слово final . Например, в следующей Java-программе show () по умолчанию является виртуальной, и программа выводит «Derived :: show () selected»)

class Base {

  

    // виртуальный по умолчанию

    public void show() {

       System.out.println("Base::show() called");

    }

}

  

class Derived extends Base {

    public void show() {

       System.out.println("Derived::show() called");

    }

}

  

public class Main {

    public static void main(String[] args) {

        Base b = new Derived();;

        b.show();

    }

}

В отличие от не-виртуального поведения C ++, если мы добавим final перед определением show () в Base , вышеприведенная программа завершится неудачно при компиляции.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Чем отличается виртуальное поведение по умолчанию в C ++ и Java?

0.00 (0%) 0 votes