`
xitong
  • 浏览: 6196984 次
文章分类
社区版块
存档分类
最新评论

类在其自身的定义体内作为数据类型

 
阅读更多

只有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在前面,就仅仅是声明一个X类型的变量,而不是定义一个X类型的变量,声明由于不需要内存开销,因此也就不需要构造对象。

后面两个的原因,和上面的类似。
X * p1;
X & A2;

最后一个
X x;
必然会失败,这是定义了一个X类型的成员变量,因此要嗲用X的构造函数,而X在这句话要执行的时候,X这个类自身还没有定义完整,所以必然会出错。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics