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;
};


谢谢。

...全文
134 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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.貌似没必要加上.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧