友元函数的声明和定义在类的内部声明,在类的外部定义,对么?

《面向对象程序设计》第04章在线测试_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《面向对象程序设计》第04章在线测试
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢在dll中定义一个类T,怎么把+-/等运算符利用友元函数重载 - VC/MFC当前位置:& &&&在dll中定义一个类T,怎么把+-/等运算符利用友元函在dll中定义一个类T,怎么把+-/等运算符利用友元函数重载&&网友分享于:&&浏览:24次在dll中定义一个类T,如何把+-*/等运算符利用友元函数重载?在DLL中定义一个类T,在T中需要重载+-*/等运算符,进行计算,如果定义为内部函数,在进行如T+10类似的计算时,可以,但计算10+T却报错,如果把+-*/定义为友元函数,即可以。但是我在dll中却报错,无法定义。def文件中这样定义的:operator&+&@1。请问在dll中如何定义+-*/等运算符呢?
------解决方案--------------------DllForClass.h
/&下列&ifdef&块是创建使从&DLL&导出更简单的
//&宏的标准方法。此&DLL&中的所有文件都是用命令行上定义的&DLLFORCLASS_EXPORTS
//&符号编译的。在使用此&DLL&的
//&任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
//&DLLFORCLASS_API&函数视为是从&DLL&导入的,而此&DLL&则将用此宏定义的
//&符号视为是被导出的。
#ifdef&DLLFORCLASS_EXPORTS
#define&DLLFORCLASS_API&__declspec(dllexport)
#define&DLLFORCLASS_API&__declspec(dllimport)
//&此类是从&DllForClass.dll&导出的
class&DLLFORCLASS_API&CDllForClass&{
double&re,
CDllForClass(void);
CDllForClass(double&r);
CDllForClass(double&r,double&i);
CDllForClass(const&CDllForClass&&a);
double&image();
double&real();
CDllForClass&operator&=(double&a);
CDllForClass&operator&=(const&CDllForClass&&a);
CDllForClass&operator&+=(double&a);
CDllForClass&operator&+=(const&CDllForClass&&a);
friend&DLLFORCLASS_API&CDllForClass&operator&+(const&CDllForClass&&a,const&CDllForClass&&b);
friend&DLLFORCLASS_API&CDllForClass&operator&+(const&CDllForClass&&a,double&b);
friend&DLLFORCLASS_API&CDllForClass&operator&+(double&a,const&CDllForClass&&b);
extern&DLLFORCLASS_API&int&nDllForC
DLLFORCLASS_API&int&fnDllForClass(void);
DllForClass.cpp
//&DllForClass.cpp&:&定义&DLL&应用程序的导出函数。
#include&"stdafx.h"
#include&"DllForClass.h"
//&这是导出变量的一个示例
DLLFORCLASS_API&int&nDllForClass=0;
//&这是导出函数的一个示例。
DLLFORCLASS_API&int&fnDllForClass(void)
return&42;
//&这是已导出类的构造函数。
//&有关类定义的信息,请参阅&DllForClass.h
CDllForClass::CDllForClass():re(0),im(0){}
CDllForClass::CDllForClass(double&r):re(r),im(0){}
CDllForClass::CDllForClass(double&r,double&i):re(r),im(i){}
CDllForClass::CDllForClass(const&CDllForClass&&a):re(a.re),im(a.im){}
DLLFORCLASS_API&CDllForClass&operator&+(const&CDllForClass&&a,const&CDllForClass&&b){
&&&&&&return&CDllForClass(a)&+=&(b);&&
DLLFORCLASS_API&CDllForClass&operator&+(const&CDllForClass&&a,double&b){
&&&&&&return&CDllForClass(a)&+=&b;&&
DLLFORCLASS_API&CDllForClass&operator&+(double&a,const&CDllForClass&&b){
&&&&&&return&CDllForClass(b)&+=&a;&&
double&CDllForClass::image(){return&}
double&CDllForClass::real(){return&}
CDllForClass&CDllForClass::operator&=(double&a){&re&=&a;im=0;&return&*&}
CDllForClass&CDllForClass::operator&=(const&CDllForClass&&a){&re&=&a.im=a.&return&*&}
CDllForClass&CDllForClass::operator&+=(double&a){&re&+=&a;&return&*&};
CDllForClass&CDllForClass::operator&+=(const&CDllForClass&&a){&re&+=&a.im&+=&a.&return&*&}
TestDllForClass.cpp
//&TestDllForClass.cpp&:&定义控制台应用程序的入口点。
#include&"stdafx.h"
#include"DllForClass.h"
#include&iostream&
using&namespace&
int&_tmain(int&argc,&_TCHAR*&argv[])
{&&&CDllForClass&c,c1(4,5),c2(3,4.0);
&&&&c&=c1+c2;
cout&&c.real();
if(c.image()&=0)cout&&&"+"&;else&cout&&"-"&;
cout&&&"i"&&&abs(c.image())&&
cin.get();
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有百度题库旨在为考生提供高效的智能备考服务,全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效服务,助您不断前行!
京ICP证号&&
京网文[3号&&
Copyright (C) 2017 Baidu《面向对象程序设计》第04章在线测试_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《面向对象程序设计》第04章在线测试
&&《面向对象程序设计》第04章在线测试
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 友元函数声明 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信