Рубрики

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

Предположим, что целое число занимает 4 байта, и в следующих классах нет выравнивания, прогнозируем вывод.

#include<iostream>

using namespace std;

  

class base {

    int arr[10];

};

  

class b1: public base { };

  

class b2: public base { };

  

class derived: public b1, public b2 {};

  

int main(void)

{

  cout << sizeof(derived);

  return 0;

}

(А) 40
(Б) 80
(С) 0
(D) 4

Ответ: (Б)
Объяснение: Поскольку b1 и b2 оба наследуются от базы классов, в производной класс есть две копии базы классов. Такое наследование без виртуальных причин приводит к неэффективному использованию пространства и неясностей. Виртуальные базовые классы используются для экономии места и предотвращения неоднозначностей в таких случаях. Например, следующая программа печатает 48. 8 дополнительных байтов предназначены для учета информации, хранимой компилятором (подробности см. В этом)

#include<iostream>
using namespace std;
 
class base {
  int arr[10];     
};
 
class b1: virtual public base { };
 
class b2: virtual public base { };
 
class derived: public b1, public b2 {};
 
int main(void)
{ 
  cout << sizeof(derived);
  return 0;
} 

Тест на этот вопрос

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

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

0.00 (0%) 0 votes