| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1314 人关注过本帖
标题:前项引用声明
只看楼主 加入收藏
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
 问题点数:0 回复次数:8 
前项引用声明
前项引用声明一个类以后,在没声明完整类之前能做什么?
可以声明此类的指针,但对象就不行。可以此类的形参,但是具体到底可以做那一些呢?
搜索更多相关主题的帖子: 声明 此类 形参 指针 对象 
2007-07-05 21:02
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
没人能指点一下迷津么?
我的前项引用声明。。。。。。

好人哪,一群好人哪!!!!!!
2007-07-05 23:50
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

没时间了... 明晚来看看... 估计HJin, aipb等很快能给你回答...
祝顺利解决...


女侠,约吗?
2007-07-05 23:58
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(cclearner)前项引用声明

/*---------------------------------------------------------------------------
File name: declVSdefn.cpp
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 7/5/2007 15:18:47
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762

Modification history:
===========================================================================


The following code compiles under MS VS 2005.

defn === definition
decl === declaration

forward decl is used when you need to know the name
of a type before the defn of that type.

If you don't have defn of a type, you can only play with the type name.
You cannot do anything that is meaningful for that type, simply because
you cannot construct an object of that type.

*/

#include <iostream>
#include <string>

using namespace std;


class B; // forward decl

class A
{
public:
void f(B& rObjB, B* pObjB, B objB); // ok --- you declare f() instead of define

/**
wrong --- you are defining g(). need to define B first.
*/
/*
void g(B& rObjB, B* pObjB, B objB)
{

}
*/

private:
//B objB; // wrong --- need to know the defn to allocate memory space for objB
B& rObjB; // reference --- ok
B* pObjB; // pointer --- ok
static B sObjB; // static --- ok

};

int main(int argc, char** argv)
{

return 0;
}


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-07-06 06:20
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
ls的分析很完整了,你看不懂的话,我就说说:

我的理解是这样的,前项声明类时,该类并没有定义。
所以任何试图给这个类分配内存的操作将导致错误。

简单的说就是定义一个对象不允许。
然而,定义指向该类的指针和引用是允许的。
作为成员函数原型声明中参数和返回类型也可以,但是这是仅能声明,不能定义。

Fight  to win  or  die...
2007-07-06 11:34
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 

又学了个知识

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-07-06 15:32
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
哦,三位斑竹的回答,我明白了哦!不知能不能实际应用的好。
嗯,HJin的英文看懂了,不过有一点不明白。
为什么private里static的行,不是static的就不行呢?
thank you

好人哪,一群好人哪!!!!!!
2007-07-06 16:06
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
回复:(cclearner)哦,三位斑竹的回答,我明白了哦!...
知道static声明定义是分开的吧?

比如在类里
static B sObjB; //这仅仅声明
类外
B A::sObjB; //这是定义,在这时sObjB才会被分配内存
//并且,这个定义要正确,必须在类B定义之后

Fight  to win  or  die...
2007-07-06 16:18
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
o ,对了,是这样的哎,嗯,一般的需要声明时分配内存,这个就不用了。
嗯,懂了~QQQ

好人哪,一群好人哪!!!!!!
2007-07-06 16:27
快速回复:前项引用声明
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055456 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved