只有static成员变量,指针或者引用,才可以在一个类的定义体内,用本类作为数据类型,如:
class Bar
{
public:
......
private:
static Bar member1; //OK
Bar* member2; //OK
Bar& member3; //OK
Bar member4; //ERROR "使用正在定义的Bar"
};
注意:如果Bar中有个成员函数的参数的数据类型是Bar,则是可以的。如:
class Book
{
public:
Book(const string& book_name) : author("Stanley B. Lippman")
{
this->book_name = book_name;
}
bool same_author(const Book book) const;
private:
string book_name;
string author;
};
类不能具有自身类型的数据成员,但是可以有指向自身类型的指针或引用。
static数据成员的类型可以是该成员所属类的类型。
static成员是独立于任何对象而存在的,它不是类类型对象的组成部分,在类体内它只是一个声明,还需要在内体外定义。
普通的数据成员是类类型对象的组成部分。