急急急~~!!!高手进来帮忙,绝对给分~~~~~~~!!!
此问题问了N个人都没有合理的解释,高手帮忙
primer C++的例程序中常用到此类情况
#ifndef STOCK_H_
#define STOCK_H_
class Stock
{
public:
stock();
stock(const char * co,int n, double pr);
//..................
private:
char company[30];
int shares;
}
#endif
假定现在前面的所有的头文件对STOCK_H_没有定义,则根据#ifndef..#endif的定义规则:执行#difine这一句,现在想问就算执行了
#define STOCK_H_
class Stock
{
//.........
}
会有什么样的结果呢?我问的是这一句干了些什么?把STOCK_H_定义成了什么?它和Stock有关系么?
前些日子有人说STOCK_H_和Stock之前没有关系,但有人说有关系(定义一个类),如果说没有关系为什么要把这个类定在这里?把Stock定义到外面不是更好,假如定义到外面了就成了:
#ifndef STOCK_H_
#define STOCK_H_
#endif
class Stock
{
public:
stock();
stock(const char * co,int n, double pr);
//..................
private:
char company[30];
int shares;
}
这样子#define STOCK_H_似乎什么也没有干?
又假如它们之前有关系,他们之前是什么关系?是不是把STOCK_H_定义成了Stoct的一个别名?
本人对此一直比解疑惑,实在不解,请高手给一个解答
问题点数:50、回复次数:11Top
1 楼keiy()回复于 2004-09-04 16:24:41 得分 2
这个#define为防止.h被调两次,与vc++ 的#pragma once功能相同
Top
2 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 16:30:48 得分 0
请问那个class Stock 在这里是干嘛的?Top
3 楼xteaj(半桶水)回复于 2004-09-04 16:31:01 得分 3
如果一个头文件被包含两次,其中定义的变量和类型都会重复定义。
用了#ifndef.....这此宏命令是防止重复定义。
如果该宏包含部分已经定义,那在#endif之前的代码就会被省略。
所以,不能移到外面。Top
4 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 16:35:39 得分 0
我现在想知道 STOCK_H_和类Stock之间的关系?Top
5 楼yyj1982(一切从头开始,好好学英语)回复于 2004-09-04 16:44:58 得分 30
它们的定义没有直接关系。
之所以把STock类的定义放在#ifndef STOCK_H_
#define STOCK_H_
...............
#endif
里面是为了保证在程序连接时不重复包含STock类的定义,是源程序的各个文件能够正确连接。
具体意思如下:
#ifndef STOCK_H_ 如果在源程序的其它文件中不包含STOCK_H_宏的定义则
#define STOCK_H_ 定义宏STOCK_H_并包含类STock的定义,如果在源程序的其它
文件中包含STOCK_H_宏的定义则不再定义宏STOCK_H_和不再包
含类STock的定义。
#endif 这一行表明这种结构的结束。Top
6 楼rorot(rorot)回复于 2004-09-04 16:58:24 得分 5
晕~
#ifndef XXX
#define XXX
class T{ ... };
#endif // #ifndef XXX
如果前面的所有文件里没有定义XXX, 那么当使用这个头文件时,将定义一个label: XXX标志
同时暴露了class T的定义. 然后当其他的文件企图再次包含这个头文件时,由于这个xxx标记已经定义,就不会再包容class T, 从而不会导致class T重复定义.
Top
7 楼Paris_Luo(不懂)回复于 2004-09-04 17:05:59 得分 5
#ifndef STOCK_H_
#define STOCK_H_
...
...
#endif
这些是预编译指令,意思是,在这之前如果没有定义STOCK_H_的话,就定义STOCK_H_,然后
...
...一直到#endif的部分才会被编译,否则编译器就忽略这部分了。
目的是为了防止一个头文件被两次包括,造成重复定义。
Top
8 楼Paris_Luo(不懂)回复于 2004-09-04 17:09:03 得分 5
我现在想知道 STOCK_H_和类Stock之间的关系?
--〉STOCK_H_只是个代号而已,你可以写成任何你喜欢的样子,只不过要统一而已.和类Stock之间没多大关系,当然不能说没关系。
例如这样写效果是一样的
#ifndef __AAAAA
#define __AAAAA
class Stock
{
public:
stock();
stock(const char * co,int n, double pr);
//..................
private:
char company[30];
int shares;
}
#endifTop
9 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:14:32 得分 0
哦,我理解了,特别是rorot的解释,让我明白了,以上参与的朋友都会有分可得,不过给rotot 50分,其它的都给20分,因为穷,不能给那么多了,在问一下怎么给分,我不会给分Top
10 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:19:12 得分 0
错了,是给yyj1982 其它的20分,我刚看错了,不好意思Top
11 楼fengbaotiaorulei(风暴跳如雷)回复于 2004-09-04 17:38:28 得分 0
我看了,最多只能给50分啊,那只能分开给了,不好意思啊Top
相关问题
- 求助 散分100 急 急急急急急急急急急
- 高分求ASP用户密码如何加密?急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
- 急急急急急急!!!!!!!!!高分求助!!!!!!!!!
- 急急急急急急急急急...在线等...解决放分
- ■■■■■■■■重分寻找Formula_one控件,急急急急急急急急急急急急急急急■■■■
- excel问题,100分请教大家,急急急急急急急急急急急!!!!!!!!!!
- 百分求购sqlserver2000可以在xp2下的版本急!急!急!急!急!急!急!急!急!急!急!急!急!急!
- 急急急急急急急急!!!!!! 150分!!快啊!!!
- .net问题,急急急急急急急急,有高分相送
- !!!!!!!!!急急急,有分




