菜问题!!1 1。操作符 .* 和 .? 是干什么用的?2。()和[]怎么重载啊?最好举个例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不如举个例子让大家来重载的好;比如int& IntList::operator[](int i) { assert((i >= 0) && (i < size())); return Values[i];}这个是IntList里面的[]重载。另外问一下。gz是什么意思……:PP 操作符.*没见过,?:我举个例子吧int a,b,c,d;a=3;b=4;c=5;d=(a<3)?b:c;结果d被赋值为5;?前为条件表达式,?后为前面条件表达式值为真的时候应用的结果表达式,:后为条件表达式为假的时候应用的条件表达式,也就是说:号前后可以为b+3等这样的表达式,UNDERSTAND? aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()如何重载 啊????????????????? aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()如何重载 啊????????????????? 唉,随便来一个类吧,只为说明“()”的重载,也附带测试程序(需要用到MFC)#include "afxwin.h"#include "stdio.h"class ClassEg{private: int key1; int key2;public: ClassEg(){key1=1;key2=2;} ~ClassEg(){} operator CPoint();}; ClassEg::operator CPoint(){ CPoint point; point.x=key1; point.y=key2; return point;}main(){ ClassEg eg; CPoint point=CPoint(eg); printf("(%d,%d)",point.x,point.y);} 程序正确可我没怎么看懂ClassEg::operator CPoint();.....CPoint point=CPoint(eg);看不明白。这里的()是函数调用运算符么?能否再给个例子?谢谢各位了 这就是所谓的强制类型转换,我把自定义类ClassEg的对象强制转换成了MFC类CPoint,因为系统内部没有这两个类之间的强制转换机制,所以必须自己来重载强制转换函数,这里的()是强制转换运算符,更精确的语句表达是这样的: CPoint point=(point)eg;//这里是把eg对象附值给CPoint类型的point,这里是要进行类型转换的或者也可以这样表达: CPoint point=eg; Class A{int i;};void main(){int A::*p=A::i;A a;a.*p=100;//p是指向对像成员数据的指针,相当于把100赋给i} 那不是一个操作符,而是二个.如class A{public: int *p_Int;...}A* ptr=new A();ptr->*p_int;你不会认为 a+(b+c)中的+(也是一个操作符吧! Zkar的例子好像一般不那么用,一般用法是:class A{public: int *p_Int;...}A* ptr=new A();*(ptr->p_int); 对不起,看错了,是microsoftwin(流星雨点) 的不行那个是一个还是两个操作符的问题要看个人理解了,不过我看书上写是一个有没有重载函数调用运算符()的例子啊?其他我看看先 .*和->*我都用不了只能这么用:void func(){cout<<"fds";};class A{public: void (*p)(); A(){p= func;}; ~A(){}};main(){ A s; A *t=new A; (*t->p)(); (*s.p)(); delete t; return 0;}为什么??? a^b是指a的b次方a^=b是指a的b次方再赋值给a操作符里除了. .* :: ?:都能重载******************************************************************************************************************************谁能回答我的问题啊?有没有重载函数调用运算符()的例子?.*和->*如何用?****************************************************************************************************************************** .* 和 ->*Pointer to member operators,指向成员的指针操作符。class .* pMemberclass为类,pMember为指向类成员的指针。通过上式可以达到访问类成员的目的,如调用类成员函数:(CObject.*pMemberFunc)(10);其中CObject是类,pMemberFunc为指向成员函数的指针。同理,如果有一个指向类的指针pObject,则:(pObject->*pMemberFunc)(10); template<typename T>class GreatThan : public binary_function<T,T,bool>{....bool operator () (const T& t1 , const T& t2) const { return t1 > t2 ; }};main:sort(vec_int.begin (),vec_int.end (),GreatThan<int>()); VC 通过sendmessage传送消息给webbrowser无效 菜鸟问问题 关于String的转换 有没有这样的图像控件? C++类成员函数如何调用外部重名函数? VC高手帮忙看下是什么问题吧?关于VC修改文件后缀的! 接口上有HWND参数,就不能跨进程传递接口了,为什么? 通过prosscessid得到窗口的句柄可以吗? 国产半成品操作系统大集合!!! 如果还知道其他的国产系统, 请跟上 高分求解!在线给分!NT/2000下如何编程拦截打印请求? 打开dll 堆栈? 高手来帮忙!!高精度模拟键盘事件????
int& IntList::operator[](int i) {
assert((i >= 0) && (i < size()));
return Values[i];
}
这个是IntList里面的[]重载。
另外问一下。gz是什么意思……:PP
int a,b,c,d;
a=3;
b=4;
c=5;
d=(a<3)?b:c;
结果d被赋值为5;
?前为条件表达式,?后为前面条件表达式值为真的时候应用的结果表达式,:后为条件表达式为假的时候应用的条件表达式,也就是说:号前后可以为b+3等这样的表达式,UNDERSTAND?
#include "stdio.h"
class ClassEg
{
private:
int key1;
int key2;
public:
ClassEg(){key1=1;key2=2;}
~ClassEg(){}
operator CPoint();
};
ClassEg::operator CPoint()
{
CPoint point;
point.x=key1;
point.y=key2;
return point;
}
main()
{
ClassEg eg;
CPoint point=CPoint(eg);
printf("(%d,%d)",point.x,point.y);
}
可我没怎么看懂
ClassEg::operator CPoint();
.....
CPoint point=CPoint(eg);
看不明白。
这里的()是函数调用运算符么?
能否再给个例子?
谢谢各位了
MFC类CPoint,因为系统内部没有这两个类之间的强制转换机制,所以必须
自己来重载强制转换函数,这里的()是强制转换运算符,更精确的语句
表达是这样的: CPoint point=(point)eg;//这里是把eg对象附值给CPoint类型的point,这里是要进行类型转换的
或者也可以这样表达:
CPoint point=eg;
{
int i;
};void main()
{
int A::*p=A::i;A a;a.*p=100;//p是指向对像成员数据的指针,相当于把100赋给i
}
如class A
{
public:
int *p_Int;
...
}A* ptr=new A();
ptr->*p_int;你不会认为
a+(b+c)中的+(也是一个操作符吧!
class A
{
public:
int *p_Int;
...
}A* ptr=new A();
*(ptr->p_int);
只能这么用:
void func(){cout<<"fds";};
class A
{
public:
void (*p)();
A(){p= func;};
~A(){}
};main()
{
A s;
A *t=new A;
(*t->p)();
(*s.p)();
delete t;
return 0;
}为什么???
a^=b是指a的b次方再赋值给a操作符里除了. .* :: ?:
都能重载***************************************************************
***************************************************************
谁能回答我的问题啊?
有没有重载函数调用运算符()的例子?
.*和->*如何用?
***************************************************************
***************************************************************
Pointer to member operators,指向成员的指针操作符。class .* pMember
class为类,pMember为指向类成员的指针。通过上式可以达到访问类成员的目的,如调用类成员函数:
(CObject.*pMemberFunc)(10);
其中CObject是类,pMemberFunc为指向成员函数的指针。同理,如果有一个指向类的指针pObject,则:
(pObject->*pMemberFunc)(10);
class GreatThan : public binary_function<T,T,bool>
{
....
bool operator () (const T& t1 , const T& t2) const
{
return t1 > t2 ;
}
};
main:
sort(vec_int.begin (),vec_int.end (),GreatThan<int>());