📜  C++类可以具有自类型的对象吗?

📅  最后修改于: 2021-05-30 19:15:01             🧑  作者: Mango

类声明可以包含self类型的静态对象,也可以具有指向self类型的指针,但是不能具有self类型的非静态对象。

例如,以下程序可以正常运行。

// A class can have a static member of self type
#include
  
using namespace std;
  
class Test {
  static Test self;  // works fine
  
  /* other stuff in class*/ 
  
};
  
int main()
{
  Test t;
  getchar();
  return 0;
}

并且下面的程序也可以正常工作。

// A class can have a pointer to self type
#include
  
using namespace std;
  
class Test {
  Test * self; //works fine
  
  /* other stuff in class*/ 
  
};
  
int main()
{
  Test t;
  getchar();
  return 0;
}

但是下面的程序产生编译错误“字段“ self”具有不完整的类型

// A class cannot have non-static object(s) of self type.
#include
  
using namespace std;
  
class Test {
  Test self; // Error
  
  /* other stuff in class*/ 
  
};
  
int main()
{
  Test t;
  getchar();
  return 0;
}

如果非静态对象是成员,则类的声明不完整,并且编译器无法找出该类对象的大小。
静态变量不会增加对象的大小。因此,使用自类型的静态变量计算大小不会出现问题。
对于编译器,所有指针都具有固定的大小,而与它们指向的数据类型无关,因此这也没有问题。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”