CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C和C++之间我一直比较疑惑的问题?在线等!!!

楼主xiaoyao19811201(俗人)2005-12-02 10:53:50 在 C/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

相关问题

  • C++疑惑
  • ★★VB.NET TO C# 的疑惑
  • 学习c/c++的疑惑
  • c++初学者的疑惑
  • C++的入门疑惑???
  • 一道c++题的疑惑
  • C,C++ VC,VC++,VC++.NET,的疑惑
  • c++初学者的疑惑,BCB???VC++???
  • The C++ Program Language的疑惑(up 有分)
  • c++ primer中的一个疑惑。

关键词

  • c++
  • 函数
  • 编译器
  • 结构
  • tagpoint
  • 变量
  • struct
  • point
  • 一样
  • 定义

得分解答快速导航

  • 帖主:xiaoyao19811201
  • iGray

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo