找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1467|回复: 7

模版友元

[复制链接]
发表于 2009-11-4 00:26:03 | 显示全部楼层 |阅读模式 IP:江苏扬州
下面一段:
template<class T> class mytem {
private:
T ac;
public:
mytem(T av=0):ac(av) {}
mytem(const mytem& ra):ac(ra.ac) {}

friend mytem<T>& myfriend(mytem<T>& rt){
cout<<rt.ac<<endl;
return rt;
}

void show() {
cout<<ac<<endl;
}
};

可以通过编译.

template<class T> class mytem {
private:
T ac;
public:
mytem(T av=0):ac(av) {}
mytem(const mytem& ra):ac(ra.ac) {}

friend mytem<T>& myfriend(mytem<T>& rt);

void show() {
cout<<ac<<endl;
}
};

这样把友元定义在外面就不通过骗译了,是怎么回事呢,我用的是DEV C++;
发表于 2009-11-4 00:26:04 | 显示全部楼层 IP:江苏扬州
因为你这是模板的友元
所以当友元没有时例化的时候
这个友元函数也是不存在的
所以这个情况就相当于模板类需要和类声明放在一起一样
因为你需要在模板类实例时才能出现这个friend函数
所以这个也需要放到声明里面
回复

使用道具 举报

发表于 2009-11-4 00:26:05 | 显示全部楼层 IP:江苏扬州
所以当友元没有时例化的时候
是模板
回复

使用道具 举报

发表于 2009-11-4 00:26:06 | 显示全部楼层 IP:江苏扬州
那这种情况就只能将定义放在类里面了是吗?
回复

使用道具 举报

发表于 2009-11-4 00:26:06 | 显示全部楼层 IP:江苏扬州
回复

使用道具 举报

发表于 2009-11-4 00:26:07 | 显示全部楼层 IP:江苏扬州
可以分开,在类的声明中,这样写:
template<class T>
friend mytem<T>& myfriend(mytem<T>& rt);

你试一下吧,应该可以,我用.net可以。
回复

使用道具 举报

发表于 2009-11-4 00:26:08 | 显示全部楼层 IP:江苏扬州
以下是引用song4在2006-9-18 21:30:48的发言:
因为你这是模板的友元
所以当友元没有时例化的时候
这个友元函数也是不存在的
所以这个情况就相当于模板类需要和类声明放在一起一样
因为你需要在模板类实例时才能出现这个friend函数
所以这个也需要放到声明里面
楼上的大概没有仔细看我的帖
楼主问放类的cpp里面为什么不行
回复

使用道具 举报

发表于 2009-11-4 00:26:09 | 显示全部楼层 IP:江苏扬州
在模板的应用中,只有对象声明以后,才能分配地址;

在对象没有声明时,模板是不存在的.像这样的友元只有类中用,在类外是实现不了.这就样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 21:32 , Processed in 0.204704 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表