类声明可以包含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等的更多准备工作,请参阅“完整面试准备课程” 。