C++编程(9)

Educn xxy yxy xxx operator xyoperator xnnoperator

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: void operator+(X,double); void f(X a) { a+1; // a.operator+(1) 1+a; // ::operator+(X(1),a) a+1.0;// ::operator+(a,1.0) } class X{ // 隐含有this指针 X* operator&(); // 前缀一元&取地址 X operator&(X); // 二元& 与 X operator++(int);// 后缀增量 X operator&(X,X);// 错误:三元 X operator/(); // 错误:一元 }; X X X X X X operator-(X); // 前缀一元减 operator-(X,X); // 二元减 operator--(X&,int); // 后缀减量 operator-(); // 错误:无操作数 operator-(X,X,X); // 错误:三元 operator%(X); // 错误:一元% Beijing University of Posts & Telecommunications Beijing [email protected] 11.2.2 运算符的预定义意义 对于用户定义运算符只做了不多的几个假 定,特别是operator=、operator、 operator和operator->只能做为非静态 的成员函数,这就保证了它们的第一个运算 对象一定是一个左值 有些内部运算符在意义上等价于针对同样参 数的另外一些运算符的组合,但是对于用户 定义运算符而言就没有这类关系,除非用户 正好将它们定义成这样,例如:+= Beijing University of Posts & Telecommunications Beijing [email protected] 11.2.3 运算符和用户定义类型 一个运算符函数必须或者是一个成员函数,或者至 少有一个用户定义类型的参数(重新定义运算符 new和delete的函数则没有此要求),这一规则保 证了用户不能改变原有表达的意义,除非表达式 中包含有用户定义类型的对象 如果某个运算符函数想接受某个内部类型做为第一 参数,那么它自然就不可能是成员函数了,例如: 2+aa,可以用非成员函数方便地处理这类问题 为枚举类型也可以定义运算符 Beijing University of Posts & Telecommunications Beijing [email protected] 运算符和用户定义类型示例 enum Day { sun, mon, tue, wed, thu, fri, sat }; Days operator++(Day& d) { return d = (sat==d) ? sun: Day(d+1); } Beijing University of Posts & Telecommunications Beijing [email protected] 11.2.4 名字空间里的运算符 一个运算符或者是一个成员函数,或者是定 义在某个名字空间里(也可以是全局名字空 间) 注意:运算符查寻机制并不认为成员函数比 非成员函数更应优先选取 此外,也不存在运算符屏蔽的问题,这保证 了内部运算符绝对不会变得无法使用,也保 证了用户可以为运算符提供新的意义,而不 必取修改现存的类声明 Beijing University of Posts & Telecommunications Beijing [email protected] 名字空间里的运算符示例 namespace std{ class ostream { ostream& operator<<(const char*); }; extern ostream cout; class string { // ... }; ostream...
View Full Document

This note was uploaded on 02/10/2014 for the course ECE C++ taught by Professor Xiaoshengtang during the Fall '13 term at BUPT.

Ask a homework question - tutors are online