Рубрики

Вывод программы C ++ | Набор 3

Прогнозировать выход программ C ++, указанных ниже.

Вопрос 1

#include<iostream>

  

using namespace std;

class P {

public:

   void print()

   { cout <<" Inside P::"; }

};

  

class Q : public P {

public:

   void print()

   { cout <<" Inside Q"; }

};

  

class R: public Q {

};

  

int main(void)

{

  R r;

  

  r.print();

  return 0;

}

Выход:
Внутри Q

Функция print не определена в классе R. Поэтому она ищется в иерархии наследования. print () присутствует в обоих классах P и Q , какой из них следует назвать? Идея состоит в том, что при наличии многоуровневого наследования функция линейно ищется в иерархии наследования до тех пор, пока не будет найдена соответствующая функция.


вопрос 2

#include<iostream>
#include<stdio.h>

  

using namespace std;

  

class Base

{

public:

  Base()

  {

    fun(); // примечание: fun () является виртуальным

  }

  virtual void fun()

  {

    cout<<"\nBase Function";

  }

};

  

class Derived: public Base

{

public:

  Derived(){}

  virtual void fun()

  {

    cout<<"\nDerived Function";

  }

};

  

int main()

{

  Base* pBase = new Derived();

  delete pBase;

  return 0;

}

Выход:
Базовая функция

См. Следующую выдержку из стандарта C ++ для объяснения.

Когда виртуальная функция вызывается прямо или косвенно из конструктора (в том числе из mem-initializer для члена данных) или из деструктора, и объект, к которому применяется вызов, является объектом, находящимся в процессе создания или уничтожения, вызываемая функция является один определяется в собственном классе конструктора или деструктора или в одной из его баз, но не является функцией, переопределяющей его в классе, производном от класса конструктора или деструктора, или переопределяющим его в одном из других базовых классов наиболее производного объекта.

Из-за этой разницы в поведении рекомендуется не вызывать виртуальную функцию объекта во время его конструирования или уничтожения. Смотрите это для более подробной информации.

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

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

Вывод программы C ++ | Набор 3

0.00 (0%) 0 votes