问几个问题,分数少了点,以后再加

kgbh 2003-09-17 11:16:29
1:CList<int,int&>和CList<int int>有什么区别?
还有
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
中ARG_KEY和ARG_VALUE有什么作用?
2:int& abc();函数中&是什么作用?
3:CBitmap::LoadBitmap( LPCTSTR lpszResourceName )参数到底是什么意思?
...全文
43 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgbh 2003-09-19
  • 打赏
  • 举报
回复
请dreamchild(梦小孩) 、wuxfBrave() 、: robothn(雷鸟) 到

http://expert.csdn.net/Expert/topic/2277/2277577.xml?temp=6.354922E-02
领分,谢谢!
kgbh 2003-09-19
  • 打赏
  • 举报
回复
OK,谢谢楼上各位的见解!
有关第一个问题,其作用仅仅是参数的传递上吗?没有别的不同吗?
基本可以结帖子了,我想。
SilverDragon 2003-09-19
  • 打赏
  • 举报
回复
学习学习
robothn 2003-09-19
  • 打赏
  • 举报
回复
2.int& abc();函数中&是什么作用?


如:CList::GetAt(...)
CList<int, int&> ml;
int value = 1;
ml.AddHead(value); // 这个就是简单类型用 & 的坏处了,你不能用ml.AddHead(1);
ml.GetAt(GetHeadPosition()) = 5;// 现在第一个元素是5了
robothn 2003-09-19
  • 打赏
  • 举报
回复
1:CList<int,int&>和CList<int int>有什么区别?
还有
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
中ARG_KEY和ARG_VALUE有什么作用?


关于第一个问题:
template<class TYPE, class ARG_TYPE> class CList : public CObject
{
...
TYPE RemoveTail();
POSITION AddHead(ARG_TYPE newElement);
TYPE& GetAt(POSITION position);
POSITION Find(ARG_TYPE searchValue, POSITION startAfter = NULL) const;
...
}
看了上面你就会明白,ARG_TYPE是TYPE作为参数时的模板类型,如bcpl所说:
"加&主要是为了提高以大型对象为参数时的效率"
对一个大型对象,如果以传值方式传递参数,则整个对象要被复制一份,有可能花很多时间,因此CList让它接受的参数类型也可以定制,这就解决了上面的问题
一般ARG_TYPE = TYPE&(如:int, int&; MyStruct, MyStruct&)
wuxfBrave 2003-09-19
  • 打赏
  • 举报
回复
1:CList<int,int&>和CList<int int>有什么区别?
区别在于一个ARG_TYPE是引用类型
引用可以主要是用在CList的函数的参数类型的,比如POSITION AddHead(
ARG_TYPE newElement
);参数类型如果是引用类型在使用大型的数据结构的时候可以节省大量的时间

还有
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject
中ARG_KEY和ARG_VALUE有什么作用?

简单映射类 CMap 采用四个参数:KEY、ARG_KEY、VALUE 和 ARG_VALUE。将键与值相关联(可以参考哈希表):通过指定值的关联键访问存储在映射中的值。KEY 参数指定键的数据类型,该键用于访问存储在映射中的数据。如果 KEY 的类型是结构或类,则 ARG_KEY 参数通常是对 KEY 中指定类型的引用。VALUE 参数指定存储在映射中的项类型。如果 ARG_VALUE 的类型是结构或类,则 ARG_VALUE 参数通常是对 VALUE 中指定类型的引用,检索的时候返回值是ARG_VALUE;ARG_KEY、ARG_VALUE用在CMap的函数,表示函数参数类型中如void SetAt(
ARG_KEY key,
ARG_VALUE newValue
);

2:int& abc();函数中&是什么作用?

int& 表示函数返回类型是一个int型的引用
3:CBitmap::LoadBitmap( LPCTSTR lpszResourceName )参数到底是什么意思
用字符串类型是windows下资源文件的格式决定的
yndfcd 2003-09-19
  • 打赏
  • 举报
回复
1:那么对于大型对象有什么区别?从语法上讲到底是什么意思?
2:这里abc() = 123;到底是怎么赋值过程?简简单单的一个等号我就不知道怎么回事了
3:资源怎么会叫"mybitmap"?是资源的文件名吗?资源不是就光有ID号标识吗?又有一个问题了不好意思,MAKEINTRESOURCE到底是做什么用处的?

1。CList的第一个类型参数是一传入的类型,第二个类型参数取出时的类型。
用MSDN上的原话就是,第一个是存贮的元素类型,第二个是我们引用这些元素是用到的类型。

2。上面己经有了。

3。一般来说资源可以用两种方法来标识,字符串或者一个整数(比如说你可以把ID_BITMAP1写成"bitmap1")。但是API函数只有一个,其参数类型是LPCTSTR,所以使用整数时要用一个宏将整数转换成LPCTSTR型。这就是MAKEINTRESOURCE。在LoadBitmap内部可以用一个简单的判断来区分。(lpBitmapName & 0xFF00).
flinming 2003-09-19
  • 打赏
  • 举报
回复
关注。。。。。。。。。
dreamchild 2003-09-19
  • 打赏
  • 举报
回复
关于第一个问题,可以查看afxtempl.h内关于CList的定义部分,这个我不太懂
dreamchild 2003-09-19
  • 打赏
  • 举报
回复
2个问题返回引用。
我以前问过,可以看
http://expert.csdn.net/Expert/topic/2073/2073406.xml?temp=.229748

3个问题:函数原型是如下,MSDN原话,不翻译了。

HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // name of bitmap resource
);
Parameters
hInstance
[in] Handle to the instance of the module whose executable file contains the bitmap to be loaded.
lpBitmapName
[in] Pointer to a null-terminated string that contains the name of the bitmap resource to be loaded. Alternatively, this parameter can consist of the resource identifier in the low-order word and zero in the high-order word. The MAKEINTRESOURCE macro can be used to create this value.

robothn 2003-09-19
  • 打赏
  • 举报
回复
仅仅是参数的传递,看CList的实现代码你就知道了
kgbh 2003-09-18
  • 打赏
  • 举报
回复
我真得很想知道这个问题,所以顶一下
kgbh 2003-09-18
  • 打赏
  • 举报
回复
没人能帮我吗?
kgbh 2003-09-18
  • 打赏
  • 举报
回复
MAKEINTRESOURCE的定义是(LPSTR)((DWORD)((WORD)(i)))就是把ID转化成unsigned short int在转换成unsigned long然后再强制转化成字符串,唉唉,真没用,所以对应的CBitmap::LoadBitmap函数算是解决了,这个LPCTSTR参数根本不是一个文件名,只是一个资源ID的强制转化
bluebohe 2003-09-17
  • 打赏
  • 举报
回复
mark
zxwitsme 2003-09-17
  • 打赏
  • 举报
回复
函数里面的参数应该是传的地址吧,所以前面要加&啊
woaini5994 2003-09-17
  • 打赏
  • 举报
回复
我现在手头的工作
基本结束
把你的问题保存下来,好好研究;
突然自己觉得没有自信了:)!
woaini5994 2003-09-17
  • 打赏
  • 举报
回复
本来想充数
可是 才知道自己是垃圾
向各位学习
bluebohe 2003-09-17
  • 打赏
  • 举报
回复
我觉得不象你说的那样,当初我就是因为不知道函数如何不申请空间地返回指针类型(比如字符串),在三年的工作中,一直都把指针返回到函数参数里,总觉得基础的知识如果不会的话,会成为日后发展的绊脚石的,不知道我说的对不对:)
bluebohe 2003-09-17
  • 打赏
  • 举报
回复
啊,这么几个问题,我不会,我签个名
住你早日解决问题!
加载更多回复(10)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧