C和C++之间我一直比较疑惑的问题?在线等!!!
1。据我所知,struct和Class除了开始成员的默认访问权限不一样,其他的都一样。
那为什么还有很多人在C++中使用struct呢?是C的习惯吗?
2。c++ 中的struct声明是写成
struct tagPoint
{
int x;
int y;
} Point; // Point p;
还是
struct Point
{
int x;
int y;
} point; //Point p;
3。C++中的typedef的用法包含C中typedef的所用用法吗?
4。C++中的extern和C中有什么区别吗?
问题点数:100、回复次数:23Top
1 楼xiaoyao19811201(俗人)回复于 2005-12-02 10:54:58 得分 0
不好意思。第2个问题应该是
2。c++ 中的struct声明是写成
struct tagPoint
{
int x;
int y;
} Point; // Point p;
还是
struct Point
{
int x;
int y;
} ; //Point p;
Top
2 楼xiaoyao19811201(俗人)回复于 2005-12-02 10:55:51 得分 0
第2个问题又写错了。呵呵
2。c++ 中的struct声明是写成
struct tagPoint
{
int x;
int y;
} Point; //struct Point p;
还是
struct Point
{
int x;
int y;
} ; //Point p;
Top
3 楼dgzha(想飞)回复于 2005-12-02 10:59:08 得分 0
1:应该是习惯,不是很清楚。
2:你第一个是定义一个point变量如果你想这样写的话,可以这样:
typedef struct Point{ ..} Point;
第二个可以;
3:是的。
4:除了 extern "C"等这类用法之外基本上一样。Top
4 楼Mybox(卡卡西)回复于 2005-12-02 11:00:08 得分 0
2。在c++中用
struct Point
{
int x;
int y;
} ; //Point p;
就行了。
3。包含
4。我觉得没区别Top
5 楼steedhorse(晨星)回复于 2005-12-02 11:00:48 得分 0
1。主要是个习惯。另外,如果所有的成员都是public的,那么写成struct即可以省掉一个“public”,又可以提高可读性(让人一看就联想到这个类型很可能是个只有public数据的类型),再有,就是在开发dll时,如果对外只导出旧式的struct和全局函数,那么这个dll也可以很容易地在C编译器中使用。
2。你那两个东西是一样的啊,又没有typedef。第一个定义struct类型tagPoint和变量point,第二个定义了类型Point和变量point。
3。可以认为一样。
4。想不出来,应该没什么区别吧。Top
6 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2005-12-02 11:01:48 得分 0
struct _Point
{
int x;
int y;
}point,*lpPoint ;
方便定义Top
7 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2005-12-02 11:02:28 得分 0
1. struct和class之间的区别只有默认访问权限。
不过,习惯上来说,对于全部成员变量为public的数据结构会定义为struct,因为这和C的struct使用比较象,一般这种对象叫做PODO(Plain Object & Data Object)
2. 第一种应该是:
typedef struct tagPoint
{
int x;
int y;
} Point;
这是C的一种习惯用法,因为在C中定义struct tagPoint{...}声明变量是要使用
struct tagPoint p1;
的写法,为了简便,就使用typedef进行定义,上面语句相当于:
struct tagPoint
{
int x;
int y;
};
typedef struct tagPoint Point;
而C++中struct和class用法相同,所以:
struct Point {...};
Point p1;
这种用法是可以的Top
8 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2005-12-02 11:03:11 得分 0
:S
大家的手好快,分又抢不到了Top
9 楼dgzha(想飞)回复于 2005-12-02 11:04:44 得分 0
呵呵,这几天穷了,赶快过来捞几分。Top
10 楼wacle([Smile!])回复于 2005-12-02 11:24:34 得分 0
1.保留struct是为了和C保持兼容,stan.lipman曾经主张把struct从C++标准中去掉,但被C++鼻祖给否定了。
2.struct结构声明
struct tagPoint{
int x,
int y
};
struct tagPoint point;//tagPoint结构变量声明
可以用typedef别名形式表达为:
typedef struct tagPoint{
int x,
int y
}Point,*LPPoint;
Point point;
LPPoint lpPoint;//tagPoint指针变量
Top
11 楼wacle([Smile!])回复于 2005-12-02 11:29:45 得分 0
在ANSI C++中extern关键字和C的用法都是一样的,都表示显示声明,或表示外部引用Top
12 楼goodluckyxl(被人遗忘的狗)回复于 2005-12-02 11:49:39 得分 0
1。据我所知,struct和Class除了开始成员的默认访问权限不一样,其他的都一样。
那为什么还有很多人在C++中使用struct呢?是C的习惯吗?
//对struct历来作为结构使用
2.c++不需要加struct来修饰定义变量 认为自定义类型也是类型
c中必须加struct
3.typedef是一样得
4.extern也一样吧Top
13 楼jeanssun(西部牛仔||孙耀文)回复于 2005-12-02 12:00:47 得分 0
要知道C++是从C上发展过来的并兼容C的
如果定义一个结构体struct _Point_t{……};
在C中定义变量需要:struct _Point_t PointA,*P;
在C++中指需要:_Point_t PointA,*P;当然前面一种也可以
……
Top
14 楼Mr_Yang(初级程序员)回复于 2005-12-02 12:20:27 得分 0
markTop
15 楼iGray(i_冲锋陷阵)回复于 2005-12-02 14:49:22 得分 100
1。据我所知,struct和Class除了开始成员的默认访问权限不一样,其他的都一样。
那为什么还有很多人在C++中使用struct呢?是C的习惯吗?
答:其他的都一样?非也非也。事实上还有细微的差别。[C++中]struct中的声明顺序,编译器实现时必须与声明完全一样。但class不是,这样,class中只能保证"块"内的声明顺序完全一样。
class A | struct A
{ | {
public: | public:
int a; | int a;
protected: | protected:
int b; | int b;
int c; | int c;
}; |};
也就是说class A实现时,b可能放在a的前面,但b一定在c的前面。因为C++标准没有强制规范不同块之间的顺序,但块内的顺序是规定了的。
struct A实现时,内部的顺序一定是a,b,c
2.略去,好好看看语法书
3。C++与C的typedef用法完全一样,意义也一样
4。extern "C"是表示该函数(或变量),不可进行名称重整name mangling。
类成员,不可避免name manglingTop
16 楼HelloIvan2005()回复于 2005-12-02 15:04:26 得分 0
MARKTop
17 楼san_126(阿三)回复于 2005-12-02 21:45:38 得分 0
我说说extern "C":
同一个函数声明,在经过C编译器编译后所产生的名字与经过C++编译器编译后所产生的名字是不一样的。正因为这样,为了在C++中能够正确的调用C函数,C++提供了C连接交换指定符号:extern "C"。Top
18 楼ascmvi(ascmviascmviascmviascmviascmviascmviascmviascmvias)回复于 2005-12-02 23:20:55 得分 0
MARKTop
19 楼cunsh(村少)回复于 2005-12-03 00:48:21 得分 0
struct 使人一看就知道这个类没有成员函数.人都习惯了.Top
20 楼mengjj(世界在变)回复于 2005-12-03 11:54:45 得分 0
深入探索c++对象模型里面对第一个问题有所解答,正如iGray(i_冲锋陷阵) 所说的Top
21 楼cwyaisxp(博客陈)回复于 2005-12-03 15:54:34 得分 0
凑凑热闹,插不上嘴Top
22 楼tycoona(飘)回复于 2005-12-03 16:59:15 得分 0
全是高手哦。Top
23 楼huihuixong(狼尾巴)回复于 2005-12-04 10:29:25 得分 0
cunsh(校友录怎么写?求求大家了?) ( ) 信誉:100
struct 使人一看就知道这个类没有成员函数.人都习惯了.
C++中struct可以用成员函数吧Top




