- 1、本文档共79页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为什么输出流插入、输入流提取、不能定义为类的成员函数? A a; acout;//编译正确,与常规用法相悖。 请记住,双目运算符如果重载为类A的成员函数,则运算符左边必须是该类A的一个对象。 反过来思考:如果将定义为类A的输出流插入运算符那么调用的时候怎么调用? #include iostream using namespace std; class INT { int data; public: INT(int data = 10) :data(data){} INT operator(int n) { return INT(data n); } ostream operator(ostream output) { output dataendl; return output; } }; 一个重载的程序 int main() { INT data1; data1cout; data1 = data12; data1cout; INT data2; data1(data2 cout); return 0; } 重载移位运算符 重载输出流插入运算符 重载为类成员函数的情况下, 双目运算符左边必须是该类的对象,所以这里只能以这样不合使用习惯的方式使用输出流插入运算符。为了避免这种情况,应该采用全局函数重载输出流插入运算符。 4.9 不同类型数据间的转换 4.9.1 内置类型数据间的转换 4.9.2 转换构造函数 4.9.3 类型转换函数 4.9.1 内置类型数据间的转换 隐式类型转换 这种转换是由编译系统自动完成的,用户不需要干预。如: int i = 6; i = 7.5 + i; 显式类型转换 类型名(数据):如int(89.5) (类型名)数据:如(int)89.5 4.9.2 转换构造函数 作用:可以将一个其它类型的数据转换成一个类的对象。 形式:只有一个形参的构造函数。例如: Complex(double r){real = r;imag = 0;} 使用方法:隐式类型转换或者显示类型转换,如定义了一个转换构造函数如上: Complex c1 = Complex(3.6);//3.6显示转换为c1 Complex c1 = 3.6;//将3.6隐式转换为Complex 有一个函数void fun(Complex c); 调用:fun(3.6);//先由3.6转换为Complex对象 #include iostream using namespace std; class Complex { double real; double imag; public: Complex(double r) :real(r), imag(0) { cout gouzao real endl; } ~Complex() { cout xigou real endl; } friend double fun(Complex c); }; 一个调用转换构造函数的例子 double fun(Complex c) { return c.real+1.0;} int main() { Complex c1 = Complex(1.0); Complex c2 = 2.0; Complex c4 = fun(3.0); return 0; } 转换构造函数 调用转换构造函数 gouzao1 gouzao2 gouzao3 xigou3 gouzao4 xigou4 xigou2 xigou1 * 4.9.3 类型转换函数 类型转换函数就是在类中定义一个成员函数,其作用是将类转换为某种数据类型。 class A { float x, y; public: A(float a, float b){ x=a; y=b; } }; void main(void) { A a(2,3); coutaendl; } 错误!类的对象不能直接输出 利用转换函数将类A的对象a转换成某种数据类型 A float * A :: operator float ( ) { return x+y; } A float 格式为: ClassName :: operator type( ) {.........} 类名 具体
文档评论(0)