class定义中的一个弱智问题,请高手指点!!!

wunderup 2007-09-11 07:39:26

比如定义一个class point,其h文件如下:

class Point;

class Point
{
public:
void setX(int _x);
int getX(void) const;

void setY(int _y);
int getY(void) const;

public:
Point(void);

public:
~Point(void);

private:
int x;
int y;
};


1、在class定义中,最前面的class Point有什么用么?

2、什么时候需要在class的实际定义中要加一个class Point??

3、很多h文件中,还出现如下的申明,这是为了什么呢?这是为了防止方法重复么?

class Point
{
public:
void Point::setX(int _x);
int Point::getX(void) const;

void Point::setY(int _y);
int Point::getY(void) const;


public:
Point(void);

public:
~Point(void);

private:
int x;
int y;
};


谢谢。

...全文
91 点赞 收藏 2
写回复
2 条回复
arong1234 2007年09月11日
1. 这里没用
2. 在有超前引用时必须。常见情况是,两个类彼此引用,这样我们无法同时保证两个类型都在被定义后使用,因此用class A声明一下有这个类,但是A的具体实现、定义,都不立刻给出
WinWing给出的例子是错误的,因为如果声明A a,则编译器需要知道A的具体定义以决定a的尺寸,而此时是无法提供的, class A声明后,定义正式给出前,我们只能用class A的引用或者指针类型。

3. 应该是写成这段代码的人不太会写代码,不是必须的
回复 点赞
WinWing 2007年09月11日
1.前置声明.告诉编译器有A这个类,只是现在先声明而不实现,在后面才实现它
2.
e.g.:
(1)class A;
class B
{
A a; //No problem
};
class A
{
....
};
(2)class B
{
A a; //A undefined!
};
class A
{
....
};

3.貌似没必要加上.
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告