Рубрики

Может ли класс C ++ иметь объект собственного типа?

Объявление класса может содержать статический объект собственного типа, он также может иметь указатель на собственный тип, но не может иметь нестатического объекта собственного типа.

Например, следующая программа работает нормально.

// Класс может иметь статический член типа self
#include<iostream>

  

using namespace std;

  

class Test {

  static Test self;  // работает отлично

  

  / * другие вещи в классе * / 

  
};

  

int main()

{

  Test t;

  getchar();

  return 0;

}

И следующая программа тоже отлично работает.

// У класса может быть указатель на собственный тип
#include<iostream>

  

using namespace std;

  

class Test {

  Test * self; //работает отлично

  

  / * другие вещи в классе * / 

  
};

  

int main()

{

  Test t;

  getchar();

  return 0;

}

Но следующая программа генерирует ошибку компиляции « поле« self »имеет неполный тип »

// Класс не может иметь нестатический объект (ы) собственного типа.
#include<iostream>

  

using namespace std;

  

class Test {

  Test self; // Ошибка

  

  / * другие вещи в классе * / 

  
};

  

int main()

{

  Test t;

  getchar();

  return 0;

}

Если нестатический объект является членом, то объявление класса является неполным, и компилятор не может определить размер объектов класса.
Статические переменные не влияют на размер объектов. Так что нет проблем в расчете размера со статическими переменными собственного типа.
Для компилятора все указатели имеют фиксированный размер независимо от типа данных, на которые они указывают, поэтому с этим также не возникает никаких проблем.

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

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

Может ли класс C ++ иметь объект собственного типа?

0.00 (0%) 0 votes