Рубрики

C ++ | Наследование Вопрос 14

Рассмотрим приведенную ниже программу на C ++.

#include<iostream>

using namespace std;

class A

{

public:

     A(){ cout <<"1";}

     A(const A &obj){ cout <<"2";}

};

  

class B: virtual A

{

public:

    B(){cout <<"3";}

    B(const B & obj){cout<<"4";}

};

  

class C: virtual A

{

public:

   C(){cout<<"5";}

   C(const C & obj){cout <<"6";}

};

  

class D:B,C

{

public:

    D(){cout<<"7";}

    D(const D & obj){cout <<"8";}

};

  

int main()

{

   D d1;

   D d(d1);

}

Что из нижеприведенного не напечатано?

Этот вопрос предоставлен Судхендрой Балигой
(А) 2
(Б) 4
(С) 6
(D) Все вышеперечисленное

Ответ: (D)
Объяснение: Вывод будет 13571358 как 1357 (для D d1) и как 1358 (для D d (d1)) …… причина в том, что …… во время наследования нам нужно явно вызывать конструктор копирования базового класса, иначе только конструктор по умолчанию базового класса называется. Еще одна вещь, так как мы используем virtual перед базовым классом, в множественном наследовании будет только одна копия базового класса. И без виртуального вывода будет …… 13157…. &… 13158 как (1315713158) соответственно для каждого объекта производного класса.
Тест на этот вопрос

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

C ++ | Наследование Вопрос 14

0.00 (0%) 0 votes