Рубрики

Могут ли виртуальные функции быть закрытыми в C ++?

В C ++ виртуальные функции могут быть закрытыми и могут быть переопределены производным классом. Например, следующая программа компилируется и работает нормально.

#include<iostream>

using namespace std;

  

class Derived;

  

class Base {

private:

    virtual void fun() { cout << "Base Fun"; }

friend int main();

};

  

class Derived: public Base {

public:

    void fun() { cout << "Derived Fun"; }

};

  

int main()

{

   Base *ptr = new Derived;

   ptr->fun();

   return 0;

}

Выход:

Derived fun()

Есть несколько вещей, чтобы отметить в вышеупомянутой программе.
1) ptr является указателем базового типа и указывает на объект производного класса. Когда вызывается ptr-> fun (), выполняется fun () из Derived .

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

Могут ли виртуальные функции быть закрытыми в C ++?

0.00 (0%) 0 votes