class <类型说明符1>
{
public:
operator <类型说明符2>();
…
}
这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。
1.operator用于类型转换函数:
类型转换函数的特征:
1) 型转换函数定义在源类中;
2) 须由 operator 修饰,函数名称是目标类型名或目标类名;
3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。
类型转换函数主要有两类:
1) 对象向基本数据类型转换:
- #include"stdafx.h"
- #include <iostream>
- #include<string>
- using namespace std;
- class D {
- public:
- D(double d) : d_(d) {}
- /* “(int)D”类型转换:将类型D转换成int */
- operator int() const {
- std::cout << "(int)d called!" << std::endl;
- return static_cast<int>(d_);
- }
- private:
- double d_;
- };
- int add(int a, int b) {
- return a + b;
- }
- int main() {
- D d1 = 1.1;
- D d2 = 2.2;
- std::cout << add(d1, d2) << std::endl;
- system("pause");
- return 0;
- }
在26行执行add(d1,d2)函数时“(int)D”类型转换函数将被自动调用,程序运行的输出为:
(int)d called!
(int)d called!
3
- #include <iostream>
- class A
- {
- public:
- A(int num = 0) : dat(num) {}
- /* "(int)a"类型转换 */
- operator int() { return dat; }
- private:
- int dat;
- };
- class X
- {
- public:
- X(int num = 0) : dat(num) {}
- /* "(int)a"类型转换 */
- operator int() { return dat; }
- /* "(A)a"类型转换 */
- operator A() {
- A temp = dat;
- return temp;
- }
- private:
- int dat;
- };
- int main()
- {
- X stuff = 37;
- A more = 0;
- int hold;
- hold = stuff; // convert X::stuff to int
- std::cout << hold << std::endl;
- more = stuff; // convert X::stuff to A::more
- std::cout << more << std::endl; // convert A::more to int
- return 0;
- }
A(const X& rhs) : dat(rhs) {}
同时,请注意上面程序的第45行more的类型在调用std::cout时被隐式地转成了int!
2. operator 用于操作符重载:
操作符重载的概念:
将现有操作符与一个成员函数相关联,并将该操作符与其成员对象(操作数)一起使用。
注意事项:
1) 重载不能改变操作符的基本功能,以及该操作符的优先级顺序。
2) 重载不应改变操作符的本来含义。
3) 只能对已有的操作符进行重载,而不能重载新符号。
4) 操作符重载只对类可用。
5) 以下运算符不能被重载:
. 原点操作符(成员访问符)
* 指向成员的指针
:: 作用域解析符
? : 问号条件运算符
sizeof 操作数的字节数
操作符函数的一般格式:
return_type operator op(argument list);
return_type:返回类型(要得到什么)
op:要重载的操作符
argument list:参数列表(操作数有哪些)
- #include <iostream>
- using namespace std;
- class employee
- {
- int salary;
- public:
- void setSalary(int s)
- {
- salary=s;
- }
- void getSalary()
- {
- cout<<salary<<endl;
- }
- bool operator >(const employee & e)//重载大于号操作符
- {
- if(salary > e.salary)
- return true;
- else
- return false;
- }
- };
- void main()
- {
- employee emp1,emp2;
- emp1.setSalary(1000);
- emp2.setSalary(2000);
- if (emp1 > emp2)
- {
- cout<<"emp1比emp2工资高"<<endl;
- }
- else
- {
- cout<<"emlp1没有emp2工资高"<<endl;
- }
- }