[讨论] 关于C++中的“委托”,第一次见到C++中居然有这个术语!!!

lyr311 2004-05-07 08:25:28
前几天看一个材料,偶然发现C++中居然有“委托”这个名词,后面赶紧去查书,结果在电子版的《C++ Primer》、《C++编程思想》这些书中都没有查到这个名词?!!最开始我以为就是“组合”,后来我发现我错了。
我虽然出差在外,也赶紧到网吧里面去查这个词,在Google里面搜索,得到一些信息,原来这个词在C#中用得很多,C++中确实提得少,看过材料之后我决得还是没有很好的理解,我把我搜到的一些有用的信息贴出来,欢迎大家讨论!
为什么大部分的C++文献中都很难找到这个词,很多搜索引擎上也搜不到有用的东西,仅仅在Google上搜到了少许的内容!C++中的委托似乎与基类指针有着千丝万缕的联系呢?!
...全文
294 25 点赞 打赏 收藏 举报
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whalefish2001 2004-05-09
在C#里有委托的概念,很有用的。

我想,在C++里也应该有吧。
  • 打赏
  • 举报
回复
lyr311 2004-05-09
呵呵,大家讨论蛮激烈的哦, bllue215() 的理解好象有误哦!~
委托和组合是完全不同的概念吧?

还有委托和代理真的不一样吗?
“委托”是不是和“用基类做成员对象”是实现的相同效果哦,只是他是用的“用基类指针做成员对象”????
如果是:和“用基类做成员对象”是实现相同效果,那不是和继承是完成的相同效果吗?
请大家继续讨论!感谢大家积极参与哈!!!
  • 打赏
  • 举报
回复
委托模式是为.net准备的,是为了平台无关性编程的
  • 打赏
  • 举报
回复
BluntBlade 2004-05-08
而从OO的角度看,它就是一种封装。
  • 打赏
  • 举报
回复
ejiue 2004-05-08
不错。委托说到底不过是一种想法:把直接的实现变成间接的实现。
在C++语言里的函数指针在C#里变成了delegate。
而从设计模式的角度看,它就是一种模式。


  • 打赏
  • 举报
回复
classrect 2004-05-08
哦,不好意思,没看见这是讨论贴。没看见楼主是lyr311(老刘:别总在CSDN上逛!!!)

呵呵,上楼的话算我没说。
  • 打赏
  • 举报
回复
classrect 2004-05-08
楼主明白了吗????
  • 打赏
  • 举报
回复
classrect 2004-05-08
服务与委托。
lyr311(老刘:别总在CSDN上逛!!!) 讲的比较好。我在这里举个简单的例子:

假如有一个String类,它有插入,删除等等功能。现在,你想写一个MyString类。
MyString除了具有String的所有功能外,还想有类似format("%d",a)的功能;
1:你可以用继承!
2:委托:

class MyString
{
public:
MyString();
~MyString();
void insert(char c,int ipos);
char delete(int ipos)
......................................
bool format(char *str,int a);
bool format(char *str,float a);
......................................
private:
String *m_pstr;
};

MyString::MyString()
{
m_pstr=new String;
}

MyString::~MyString()
{
delete m_pstr;
}

void MyString::insert(char c,int ipos)
{
m_pstr->insert(c,ipos); //委托!!!把插入功能委托给String
}

char MyString::delete(int ipos)
{
return m_pstr->delete(ipos); //委托!!!把删除功能委托给String
}

bool MyString::format(char *str,int a)
{
//自己写!!!

}


  • 打赏
  • 举报
回复
_阿胜_ 2004-05-08
看一下Borland的资料(如C++ Builder)就知道有“委托”这个概念,为什么现在C#也有呢?是因为以前Borland的总设计师(Delphi的创始人Anders)现在已经是微软的C#语言的总设计师和微软.NET技术的核心人员(《Borland传奇》有叙述)。
  • 打赏
  • 举报
回复
pacman2000 2004-05-08
设计模式的名词而已。关键是理解。
  • 打赏
  • 举报
回复
runall 2004-05-08
委托就是代理的意思吧
好像《More effective c++》里面有
  • 打赏
  • 举报
回复
cgsw12345 2004-05-08
刚查了一下210页,不过楼主要抱有太大的希望,没有介绍多少:)
如果要正真理解,应该多看点讲委托模式的书(C#中一般有)
然后回头想想C++中怎么实现!
  • 打赏
  • 举报
回复
cgsw12345 2004-05-08
关于委托,在C++里用函数指针来实现,与C#中的委托不同就是C++中的不同类型安全,而C#中用类一封装并且是安全的。
所以委托在C++中应该是和函数指针紧密联系的 :)
C++中有一本书中可以查到相关的介绍《D&E》哪一节我忘了

最后说明一下,委托与代理是不相同的。
  • 打赏
  • 举报
回复
doolin 2004-05-08
这里所讨论的'委托'在C++ Primer有同样的讨论,不过所用的名字不同而已,那里是用'组合'
用途和设计思想完全相同,并且讨论更详细.具体分了composition by value 和composition by reference.并且讨论了运用2中不同组合的环境和理由
  • 打赏
  • 举报
回复
goldencode 2004-05-08
java 的RMI好象也比较类似,没仔细看楼主的贴子太长了呵呵.
  • 打赏
  • 举报
回复
zxs790501 2004-05-08
“委托”应该就是“代理”

“代理类”在《More Effective C++》中好像出现过

用来实现隐藏的
  • 打赏
  • 举报
回复
zhouqingyuan 2004-05-07
应该说C#中的委托借鉴了了委托模式的思想。

C++中没有什么委托。只是利用C++谈模式的时候提到罢了。
  • 打赏
  • 举报
回复
sttony 2004-05-07
委托应该指一种设计模式,而不是一种语言本身的特性。确实目前只有在.Net中才有委托这种语言特性,但大量的语言都可以实现委托这种设计模式。而且.Net中的委托实际上是一种安全的函数指针,而委托模式中应该使用对象的引用来完成委托者于被委托者的联系。
我理解: 委托模式就是委托者的不完成实际的工作,也不关心完成工作的细节,但有完成工作的接口,这个接口只是将请求发给被委托者来完成。在C++中就是委托对象有一个函数和被委托对象的函数一样(一致的接口),但委托对象的函数不完成具体工作,而是通过被委托对象的引用(或指针)调用被委托对象的函数。将具体工作交给被委托对象的函数去完成。 这样从client的角度来看委托对象实现了接口。用继承的虚函数机制也可以完成同样的功能,但有时候委托对象和被委托对象不满足继承的条件(is-a关系),用委托有更好的灵活性。
  • 打赏
  • 举报
回复
代码之诗 2004-05-07
委托对 C++ 来说不是机制,而是模式。也说不上是 C# 强加给 C++ 的,因为有委托模式的时候还没有 C# 呢。《设计模式》成书于1994年,C# 什么时候才有?呵呵。
  • 打赏
  • 举报
回复
mopyman 2004-05-07
标准的C++中根本就没有委托机制,这是C#里发展出来又强加给VC++.NET既托管C++的
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-07 08:25
社区公告
暂无公告