免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2368 | 回复: 8
打印 上一主题 下一主题

[C++] 疑惑:一个不常见的结构定义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-09 22:43 |只看该作者 |倒序浏览
static const struct sfunc_return_type sfunc_table[] = {
      { "$realtime",   IVL_VT_REAL,   1, 0 },
      { "$bitstoreal", IVL_VT_REAL,   1, 0 },
      { "$itor",       IVL_VT_REAL,   1, 0 },
      { "$realtobits", IVL_VT_LOGIC, 64, 0 },
      { "$time",       IVL_VT_LOGIC, 64, 0 },
      { "$stime",      IVL_VT_LOGIC, 32, 0 },
      { "$simtime",    IVL_VT_LOGIC, 64, 0 },
      { 0,             IVL_VT_LOGIC, 32, 0 }
};

struct sfunc_return_type_cell : sfunc_return_type {
      struct sfunc_return_type_cell*next;
};

struct sfunc_return_type_cell*cur = sfunc_stack;
      while (cur) {
            if (strcmp(cur->name, name) == 0)
                  return cur;

            cur = cur->next;
      }


请问:
这里
1.
struct sfunc_return_type_cell : sfunc_return_type {
      struct sfunc_return_type_cell*next;
};

怎么理解?
2.不太理解这里cur指针到底是什么类型,为什么cur->name和cur->next可以使用?
请哪位解释下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-10-09 22:58 |只看该作者
原帖由 fineamy 于 2008-10-9 22:43 发表




请问:
这里
1.
struct sfunc_return_type_cell : sfunc_return_type {
      struct sfunc_return_type_cell*next;
};
怎么理解?
2.不太理解这里cur指针到底是什么类型,为什么cur->name和cur ...


这个 你得先把
struct sfunc_return_type
的定义找出来
就可以理解了

呵呵 你在玩verilog啊

[ 本帖最后由 blizzard213 于 2008-10-9 23:03 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-10-09 23:02 |只看该作者
原帖由 fineamy 于 2008-10-9 22:43 发表




请问:
这里
1.
struct sfunc_return_type_cell : sfunc_return_type {
      struct sfunc_return_type_cell*next;
};
怎么理解?
2.不太理解这里cur指针到底是什么类型,为什么cur->name和cur ...

see here
/*
 * This table describes all the return values of various system
 * functions. This table is used to elaborate expressions that are
 * system function calls.
 */

struct sfunc_return_type {
      const char*   name;
      NetExpr::TYPE type;
      unsigned      wid;
      int           signed_flag;
};


那个冒号是继承的意思

论坛徽章:
0
4 [报告]
发表于 2008-10-09 23:26 |只看该作者
这个是C++吧

论坛徽章:
0
5 [报告]
发表于 2008-10-09 23:30 |只看该作者
原帖由 雨过白鹭洲 于 2008-10-9 23:26 发表
这个是C++吧

呵呵 见标题

论坛徽章:
0
6 [报告]
发表于 2008-10-10 06:31 |只看该作者
struct
也可以继承??
应该不能把!!

还是第一次看见!!

论坛徽章:
0
7 [报告]
发表于 2008-10-10 09:07 |只看该作者
C++的结构体,实际上和类没太大区别,继承也就不奇怪了

论坛徽章:
0
8 [报告]
发表于 2008-10-10 09:09 |只看该作者
讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么??
---------------------------------------------------------------

问的人太多,干脆整理个FAQ吧。
首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:
(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:
(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
(2)都可以有一大堆public/private/protected修饰符在里边;
(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。
(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。
(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。
(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
---------------------------------------------------------------

最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数

论坛徽章:
0
9 [报告]
发表于 2008-10-10 09:45 |只看该作者

谢谢楼上各位!

blizzard213,不好意思,忘贴了.呵呵,ICARUS我只是随便看看而已!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP