GeekBand C++ 面向对象高级编程(下) 第三周笔记
2016-08-06 19:24
302 查看
第三周的部分感觉相对繁杂,函数模板方面零零散散,所以这次的笔记就围绕转换函数来整理。整理内容来源于脚本之家。
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义的体内声明,在保留字operator之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中一个非静态成员函数。
定义格式:
这个转换函数定义了由类型说明符1到类型说明符2之间的映射关系。
转换函数是用来将一种类型的数据类型转换成另一种类型。
operator用于类型转换函数:
转换函数特质:
1.类型转换函数定义在源类中。
2.需要用operator修饰,函数名称是目标类型名后目标类名。
3.函数没有参数,没有返回值,但是有return语句,在return语句中返回目标类型数据或调用目标类的构造函数。
类型转换函数主要有两类;
1.对象向基本数据类型转换(例):
2.对象向不同类的对象转换(例):
operator用于操作符重载:
操作符重载将现有操作符与一个成员函数相关联,并将该操作符与其他成员对象一起使用。
需要注意的是,重载不能改变操作符的基本功能,一级该操作符的优先级顺序。不应改变操作符的本来含义,且只能对已有的操作符进行重载,而不能重载新符号。操作符重载只对类可用。以下运算符不能被重载:
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义的体内声明,在保留字operator之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中一个非静态成员函数。
定义格式:
class <类型说明符1> { public: operator <类型说明符2>(); … }
这个转换函数定义了由类型说明符1到类型说明符2之间的映射关系。
转换函数是用来将一种类型的数据类型转换成另一种类型。
operator用于类型转换函数:
转换函数特质:
1.类型转换函数定义在源类中。
2.需要用operator修饰,函数名称是目标类型名后目标类名。
3.函数没有参数,没有返回值,但是有return语句,在return语句中返回目标类型数据或调用目标类的构造函数。
类型转换函数主要有两类;
1.对象向基本数据类型转换(例):
#include<iostream> #include<string> using namespace std; class D{ public: D(double d):d_(d) {} 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; }输出结果为:
<int>d called! <int>d called! 3可见在add(d1,d2)函数调用时隐性的调用了operator int()const函数。
2.对象向不同类的对象转换(例):
#include<iostream> class X; class A { public: A(int num=0):dat(num) {} A(const X& rhs):dat(rhs) {} operator int() {return dat;} private: int dat; }; class X { public: X(int num=0):dat(num) {} operator int() {return dat;} operator A(){ A temp=dat; return temp; } private: int dat; }; int main() { X stuff=37; A more=0; int hold; hold=stuff; std::cout<<hold<<std::endl; more=stuff; std::cout<<more<<std::endl; return 0; }程序中的X通过“operator A()”类型转换来实现将X类型对象转换成A类型。
operator用于操作符重载:
操作符重载将现有操作符与一个成员函数相关联,并将该操作符与其他成员对象一起使用。
需要注意的是,重载不能改变操作符的基本功能,一级该操作符的优先级顺序。不应改变操作符的本来含义,且只能对已有的操作符进行重载,而不能重载新符号。操作符重载只对类可用。以下运算符不能被重载:
. 原点操作符(成员访问符) * 指向成员的指针 :: 作用域解析符 ? : 问号条件运算符 sizeof 操作数的字节数
相关文章推荐
- Geekband_C++面向对象高级编程_第三周学习笔记
- (GeekBand)C++面向对象高级编程(上)第一周笔记(2)
- GeekBand C++ 面向对象高级编程(上) 第二周笔记
- Geekband C++面向对象高级编程(下) 第二周笔记 暗影行者
- Geekband_C++面向对象高级编程_第五周学习笔记
- (GeekBand)C++面向对象高级编程(上)第一周笔记(1)
- [GeekBand]C++面向对象高级编程(上)- 第一周笔记
- GeekBand C++ 面向对象高级编程(上) 第一周笔记
- Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者
- Geekband C++面向对象高级编程(上) 第一周笔记 暗影行者
- Geekband C++面向对象高级编程(下) 第一周笔记 暗影行者
- (GeekBand)C++面向对象高级编程(上)第一周测试
- (Geekband)C++面向对象高级编程(第一周)
- C++面向对象高级编程(下)第二周-Geekband
- GeekBand C++面向对象高级编程(上)一
- C++面向对象高级编程(上)-Geekband
- C++面向对象高级编程笔记01--GeekBand
- C++面向对象高级编程(上)学习笔记
- C++面向对象高级编程笔记03--GeekBand
- Geekband_C++面向对象高级编程_第六周学习笔记