Рубрики

Вывод программы C ++ | Комплект 18

Предсказать вывод следующих программ на C ++.

Вопрос 1

#include <iostream>

using namespace std;

  

template <int N>

class A {

   int arr[N];

public:

   virtual void fun() { cout << "A::fun()"; }

};

  

class B : public A<2> {

public:

   void fun() { cout << "B::fun()"; }

};

  

class C : public B { };

  

int main() {

   A<2> *a = new C;

   a->fun();

   return 0;

}

Выход:

B::fun()

В целом, цель использования шаблонов в C ++ состоит в том, чтобы избежать избыточности кода. Мы создаем универсальные классы (или функции), которые можно использовать для любого типа данных, если логика идентична. Тип данных становится параметром, и экземпляр класса / функции создается во время компиляции, когда передается тип данных. Шаблоны C ++ также допускают в качестве параметров не тип (параметр, представляющий значение, а не тип данных).
В вышеприведенной программе есть универсальный класс A, который принимает нетипизированный параметр N. Класс B наследуется от экземпляра универсального класса A. Значение N для этого экземпляра A равно 2. Класс B переопределяет fun () класс A. Класс C наследуется от B. В main () есть указатель 'a' типа A, который указывает на экземпляр C. Когда вызывается a-> fun (), функция класса B выполняется потому, что fun () является виртуальной, а виртуальные функции вызываются в соответствии с реальным объектом, а не в соответствии с указателем. В классе C нет функции fun (), поэтому она ищется в иерархии и находится в классе B.

вопрос 2

#include <iostream>

using namespace std;

  

template <int i>

int fun()

{

   i =20; 

}

  

int main() {

   fun<4>();

   return 0;

}

Выход:

 Compiler Error

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

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

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

Вывод программы C ++ | Комплект 18

0.00 (0%) 0 votes