12.2几个特殊运算符的重载 12.2.1增量减量运算符 type class_name: operator++0;∥前置增量 type class_name: operator++(nt);∥后置增量 例 class X t public (inta=0):X(a)旮} int Geto return X int operator ++ o return ++X: 1 int operator ++(int)( return x++;3
12.2 几个特殊运算符的重载 12.2.1 增量减量运算符 type class_name :: operator ++ (); // 前置增量 type class_name :: operator ++ (int); // 后置增量 例: class X { int x; public: X(int a = 0) : x(a) {} int Get() { return x; } int operator ++ () { return ++ x; } int operator ++ (int) { return x ++; } }
Ⅹax(10); cout < aX Get( < endl ∥输出10 ++ax; cout < aX Get( < endl ∥输出11 i= aX++ cout <<i<< endl ∥输出11 cout < aXGet( < endl ∥输出12
X aX(10); cout << aX.Get() << endl; // 输出 10 ++ aX; cout << aX.Get() << endl; // 输出 11 i = aX ++; cout << i << endl; // 输出 11 cout << aX.Get() << endl; // 输出 12
1222下标运算符 type class name . operator[](arg; 例为 String类添加一个下标运算符重载: char& operator [(int i return pStr[]; 1 有了这样的运算符重载,就可以利用以下的方式修改串对象的 内容: String s( The C++ language") s[5]='' s[6]=”; s Showo ∥输出: The C language 注意:这样的定义有可以破坏类的封装性。为安全起见,最好 将该函数的返回值改为char
12.2.2 下标运算符 type class_name :: operator [ ] (arg); 例 为 String 类添加一个下标运算符重载: char& operator [] (int i) { return pStr[i]; } 有了这样的运算符重载,就可以利用以下的方式修改串对象的 内容: String s("The C++ language"); s[5] = ' '; s[6] = ' '; s.Show(); // 输出:The C language 注意:这样的定义有可以破坏类的封装性。为安全起见,最好 将该函数的返回值改为 char
函数调用运算符())、成员选择运算符(->)、new运算 符和 delete运算符等,重载时也有一些特殊的要求和限制 但由于它们在实用中极少被重载,且重载和使用时的难度较 大,这里就不再介绍了。有兴趣的同学可以参考相应资料
函数调用运算符(( ))、成员选择运算符(->)、new 运算 符和 delete 运算符等,重载时也有一些特殊的要求和限制。 但由于它们在实用中极少被重载,且重载和使用时的难度较 大,这里就不再介绍了。有兴趣的同学可以参考相应资料
第13章C+语言的10流类 13.1概述 输入输出(简称O, Input/ Output)是指计算机与其外部设 备—如,显示器、打印机、磁盘机、键盘,等等——以及其 它计算机交换信息的功能。一个语言ⅣO功能的强弱在一定程 度上表现了语言整体功能的强弱。 与其它高级语言不同,C++语言中没有独立的WO语句,为 了方便用户使用,标准中规定了大量的WO函数。利用OOP 技术,C++语言更是提供了一个庞大Ⅳ○流类。利用该类的对 象,程序员可以编写出使用极为简便的、与设备无关的程序; 通过对流类中所定义(重载)的流运算符进行重载,可以使程 序员自己定义的类本身也具有MO功能
第13章 C++ 语言的 I/O 流类 13.1 概述 输入输出(简称 I/O, Input / Output)是指计算机与其外部设 备——如,显示器、打印机、磁盘机、键盘,等等——以及其 它计算机交换信息的功能。一个语言 I/O 功能的强弱在一定程 度上表现了语言整体功能的强弱。 与其它高级语言不同,C++ 语言中没有独立的 I/O 语句,为 了方便用户使用,标准中规定了大量的 I/O 函数。利用 OOP 技术,C++ 语言更是提供了一个庞大 I/O 流类。利用该类的对 象,程序员可以编写出使用极为简便的、与设备无关的程序; 通过对流类中所定义(重载)的流运算符进行重载,可以使程 序员自己定义的类本身也具有 I/O 功能
13.1.1流 C++语言为了向程序员提供一个统一的VO接口,使程序的 设计尽可能地与具体设备无关,在程序员与具体设备之间设置 了一个抽象的概念一流( Stream) C++将各式各样的具体设备转化成一个称为流的逻辑设备, 并由流来管理对具体设备的O。而从程序员的角度来看,所 有流的行为都是相同的。因此,一个用来向磁盘写信息的操作 同样也可以向显示器进行输出。 C+在两种类型的流—一文本(吧ex流和二进制 ( Binary)流
13.1.1 流 C++ 语言为了向程序员提供一个统一的 I/O 接口,使程序的 设计尽可能地与具体设备无关,在程序员与具体设备之间设置 了一个抽象的概念——流(Stream)。 C++ 将各式各样的具体设备转化成一个称为流的逻辑设备, 并由流来管理对具体设备的 I/O。而从程序员的角度来看,所 有流的行为都是相同的。因此,一个用来向磁盘写信息的操作 同样也可以向显示器进行输出。 C++ 中存在两种类型的流——文本(Text )流和二进制 (Binary)流
13.1.2文件 流是C+语言对逻辑设备的抽象,而文件(Fe)则是C+语 言对具体设备的抽象。所有的流均具有相同的行为,而不同的 文件则具有不同的行为。比如,显示器(文件)只能接受信息, 因此只能对该文件进行写操作;对键盘文件只能进行读操作: 对磁盘文件则可以进行读、写操作 当程序与一个文件进行读写操作前,必须通过打开文件的操作 将文件与流联系起来。一旦该联系建立,对流的访问就是对该 具体设备的访问。若文件支持随机访问,则打开文件操作还会 将一个读指针和一个写指针置于文件的相应位置处,随着程序 对文件的访问,系统会自动移动这两个指针,以便为下一次访 问作好准备 在完成了对文件的读写操作后,应当通过关团文件操作将文件 与流的联系断开。关闭文件时,系统会自动根据具体情况对流 进行“刷新”。当程序正常结束时,系统会自动关闭所有已打 开的文件
13.1.2 文件 流是 C++ 语言对逻辑设备的抽象,而文件(File)则是 C++语 言对具体设备的抽象。所有的流均具有相同的行为,而不同的 文件则具有不同的行为。比如,显示器(文件)只能接受信息, 因此只能对该文件进行写操作;对键盘文件只能进行读操作; 对磁盘文件则可以进行读、写操作。 当程序与一个文件进行读写操作前,必须通过打开文件的操作 将文件与流联系起来。一旦该联系建立,对流的访问就是对该 具体设备的访问。若文件支持随机访问,则打开文件操作还会 将一个读指针和一个写指针置于文件的相应位置处,随着程序 对文件的访问,系统会自动移动这两个指针,以便为下一次访 问作好准备。 在完成了对文件的读写操作后,应当通过关闭文件操作将文件 与流的联系断开。关闭文件时,系统会自动根据具体情况对流 进行“刷新”。当程序正常结束时,系统会自动关闭所有已打 开的文件
13.1.3缓冲 所谓缓冲( Buffer),是指系统在内存中开辟一块叫做缓冲区 的区域,将欲写入文件或从文件中读出的数据暂时存放在该区 域中 个流可以是缓冲流(带有缓冲区的),也可以是非缓冲流。 对于缓冲流,只有当缓冲区已满(称为溢出, Overflow),或 者当前进入缓冲区的是一个新行符(仅文本流),流才会自动 刷新。而非缓冲流则将传给它的数据立即处理掉。 为了提高程序的运行效率,大多数流都是缓冲流。但有时为了 满足某些特殊的需要,系统也预定义了一些非缓冲流
13.1.3 缓冲 所谓缓冲(Buffer),是指系统在内存中开辟一块叫做缓冲区 的区域,将欲写入文件或从文件中读出的数据暂时存放在该区 域中。 一个流可以是缓冲流(带有缓冲区的),也可以是非缓冲流。 对于缓冲流,只有当缓冲区已满(称为溢出,Overflow),或 者当前进入缓冲区的是一个新行符(仅文本流),流才会自动 刷新。而非缓冲流则将传给它的数据立即处理掉。 为了提高程序的运行效率,大多数流都是缓冲流。但有时为了 满足某些特殊的需要,系统也预定义了一些非缓冲流
132C++的基本流类体系 1321基本流类体系 lOS streambuf istream ostream 注:图中的粗虚 线箭头不表示派 生关系,它表示 个指针。 iostream
13.2 C++ 的基本流类体系 13.2.1 基本流类体系 ios istream ostream iostream streambuf 注:图中的粗虚 线箭头不表示派 生关系,它表示 一个指针
1322预定义的流及流运算符 C+语言在头文件 iostream.h中预定义了4个流类的对象: extern istream cin ∥标准输入流 extern ostream cout ∥标准输出流 extern ostream cerr ∥标准错误流(非缓冲) extern ostream clog; ∥标准错误流 这4个流叫做“标准”流。这是因此只要程序中嵌入了系统 头文件 iostream. h它们就会被自动创建。缺省时,与cin所 关联的文件为键盘,其它3个流与显示器关联。除cer为非 缓冲流外,其余的均为缓冲流 C++为输入和输出流分别重载了“>>”和“<运算符,并将 前者叫做“提取”运算符;后者叫做“插入”运算符。 在允许O重定向的系统中(如DOs),还可以对输入流和 输出流进行重定向。但是,错误流不得重定向
13.2.2 预定义的流及流运算符 C++ 语言在头文件 iostream.h 中预定义了 4 个流类的对象: extern istream cin; // 标准输入流 extern ostream cout; // 标准输出流 extern ostream cerr; // 标准错误流(非缓冲) extern ostream clog; // 标准错误流 这 4 个流叫做“标准”流。这是因此只要程序中嵌入了系统 头文件 iostream.h 它们就会被自动创建。缺省时,与 cin 所 关联的文件为键盘,其它 3 个流与显示器关联。除 cerr 为非 缓冲流外,其余的均为缓冲流。 C++ 为输入和输出流分别重载了“>>”和“<<”运算符,并将 前者叫做“提取”运算符;后者叫做“插入”运算符。 在允许 I/O 重定向的系统中(如 DOS),还可以对输入流和 输出流进行重定向。但是,错误流不得重定向