24小时热门版块排行榜    

查看: 1927  |  回复: 4

tiandui

新虫 (初入文坛)

[求助] “类”的前置声明与“函数”的前置声明区别在哪里

如题,本人初学,我知道“类”的前置声明是有局限的,“函数”的前置声明则不同

于是有些疑惑,这二者机制差别在哪里

为什么类不能像函数一样,前置声明,然后任意使用

标准设计成这样一定有其道理,那是什么原因呢。

请教各路英雄,谢谢大家。

[ Last edited by tiandui on 2012-2-26 at 17:23 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
jjdg(金币+1): 感谢参与 2012-02-27 00:18:43
函数和类的前置声明,是一样的,也是不一样的,是统一的,也是对立的,哈哈。唧歪过后:

函数(类)的前置声明都是告诉编译器有那么一个函数名(类名)。

区别在于,声明函数的时候,附带着这个函数的参数列表;而声明类时,编译器只知道类的名字,不知里面的成员变量和成员函数。


1.不需要调用类的实现时,可以仅仅使用类的前置声明就可以。
2.当要用到类的具体内容时,就要类的定义。

为什么如此设计,应该是为了简洁吧。估计C++它爸不想在声明时使用一长串的代码来描写类的五脏六腑。。。

参见: C++它爸的《The C++ Programming Language》

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
2楼2012-02-26 21:20:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tiandui

新虫 (初入文坛)

引用回帖:
: Originally posted by lurencyj at 2012-02-26 21:20:12:
函数和类的前置声明,是一样的,也是不一样的,是统一的,也是对立的,哈哈。唧歪过后:

函数(类)的前置声明都是告诉编译器有那么一个函数名(类名)。

区别在于,声明函数的时候,附带着这个函数的参数列表; ...

呃,说是这么个说
哦,我明白了,是因为编译时碰到函数,只要知道参数表和返回值,编译就能判断是否匹配了,可以排除匹配错误
但是如果只知道类的声明,编译时是不能判断是否合理的,好些过程没法执行

我开始弄混了执行和编译器检查这两个过程。

执行的时候才会进出函数,编译时不用,所以编译时不存在顺序问题
而编译时会进出类,所以这时候必须知道类的细节?(编译这词被我胡乱用了)

那再请问,这是不是强调编译是严格按代码“顺序”执行的?
3楼2012-02-26 22:17:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

jjdg(金币+1): 感谢参与 2012-02-27 00:18:54
tiandui(金币+3): 有帮助 2012-02-28 21:31:11
其实你不用管编译的过程,编译过程大致包括代码的语法分析,建立抽象语法树,建立symbol table(中文可能叫符号表,不清楚,哈哈),然后是汇编代码,再机器码。过程中要读取分析几次源代码,所以无所谓顺序不顺序。

在应用层面上,楼主只要关心程序的运行时过程就好了。你可以使用一下debug工具,让程序一步一步执行看看。
很女子很弓虽大
4楼2012-02-26 22:25:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tiandui

新虫 (初入文坛)

引用回帖:
: Originally posted by lurencyj at 2012-02-26 22:25:50:
其实你不用管编译的过程,编译过程大致包括代码的语法分析,建立抽象语法树,建立symbol table(中文可能叫符号表,不清楚,哈哈),然后是汇编代码,再机器码。过程中要读取分析几次源代码,所以无所谓顺序不顺序 ...

嗯,谢谢楼上,勉强调试了下,单步执行
发现“进入”到类时,总是进入到类的函数,从这个意义上看,感觉类相当于一组函数,对单个函数,前置声明就行了,对一组函数,仅仅声明类是不够的
5楼2012-02-27 09:05:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tiandui 的主题更新
信息提示
请填处理意见