- 浏览: 324350 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
huangyunbin:
swc.advance(); 这个什么时候被调用是最核心的 ...
滑动窗口计数java实现 -
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB 从入门到精通专题教程 -
rryymmoK:
深入浅出MongoDB应用实战开发下载地址:http://pa ...
MongoDB 从入门到精通专题教程 -
u012352249:
怎么支持多个窗口啊?
滑动窗口计数java实现 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB 从入门到精通专题教程
C(控制台) F(文件)
---------------------------------------------
* I
----------------------------------------------
* O
控制台与文件的输入输出是完全一样的.
EOF end of file 代表-1
================================================
* 输出格式控制
只对格式化输出有效 <<
指定输出宽度:cout.width(int),一次性的,只对下一个输出有效
cout.fill('&')//在空白地方填充指定字符,不是一次性的
设置输出精度
添加控制标志
常见输出控制标志:
数输出A~F时变大写)
输出控制符
注意:要用以上格式要包含头文件<iomanip>
===============================================
ofstream fout(文件名,方式/*默认ios::out*/);
默认会清除文件中原内容
打开方式:ios::app(追加内容)
//既可读也可写
fstream fio(文件名,ios::in|ios::out);
一般提倡读写分开.
+ 保存对象
A a(23);
fout.write((char*)&a,sizeof(a));
有一点如果要保存string对象时要先将其转换成c_str风格再转.
因为string里是一个指针,它的长度是4,如果保存的话会是一个地址,是毫无意
义的.
用法:fout.write((char*)strngObj.c_str(),strlen(strngObj));
-------------------------------
* 内部类
在一个作用域范围内定义的类叫做内部类.我们可以在一个函数里定义一个类
,也可以在一个类里定义一个内部类.
内部类的作用:隐藏名字,避免冲突.可以通过其中统一的内部类名来统一各个类
的操作方法.其中最著名的就是迭代器.其实迭代器是类的内部类.
在c++里内部类与外部类毫不相干.
-------------------------------------------------
* 异常
如果不用异常程序各处会出现错误处理代码,使程序显的混乱,而异常处理将会
把错误集中处理,让程序结构清晰起来.
异常是不常见,但无法避免,可预料并作准备.
c++的异常处理就像小两口打架,想抛什么就抛什么.
exception类有一个成员函数what()用来返回描述异常的字符串e.what();
在一个函数里如果有没有被捕获的异常会被抛到调用它的地方.
最终会传到main函数里面.所以我们在main里写上下面语句块:
try { } catch(...) { } 这样就能处理所有的异常.
抛出子类型对象异常,可以用父类对象来进行捕获.当一起进行捕获,但要注意先
后顺序,一般是先catch子类再catch父类对象.
catch( 类型 变量 ) {
throw;
}//处理不了,重新抛出该异常.一般不这么做,偶尔做一做
其中的类型可以是自定义类型,同样可以向外抛.
====================================================
* 重要数据结构与算法
+ 链表
结构中也可以写构造函数,结构与类的区别最主要的区别就是结构中默认的成员
是public型的,而类中成员默认是private型的.其他的大致相同.
基本类型()的值是0
T(),T是基本类型时值是0,T是类时T()会是一个无名对象.
当然编译器有可能会优化程序.
---------------------------------------------
* I
cin ifstream fin(文件名) fin.close() cin>> fin>> cin.get(/*char&*/) fin.get(/*char&*/) getline(cin/fin,str,'/*结束符*/') read(内存地址,字节数)//此时注意长度 read()不会自动加'\0' clear()恢复错误状态,ignore()清缓冲 peek() putback()把读出的字符放回缓冲区
----------------------------------------------
* O
cout ofstream fout(文件名) cerr/clog fout.close() << put() write(内存地址,字节数)把内存中的数写到文件中 string str; fin.read((char*)&str,sizeof(str));//结果不一定是想要的. 如果要读的是字符就用字符数组 fin.gcount()//最近读到多少个字符 fin.eof()//判断是否读到了文件末尾
控制台与文件的输入输出是完全一样的.
EOF end of file 代表-1
================================================
* 输出格式控制
只对格式化输出有效 <<
指定输出宽度:cout.width(int),一次性的,只对下一个输出有效
cout.fill('&')//在空白地方填充指定字符,不是一次性的
//例子 #include <iostream> using namespace std; class wf{ int w; char ch; public : wf(int w, char c ):w(w),ch(c){} friend ostream& operator<<(ostream& os, const wf& o){ os.width(o.w); os.fill(o.ch); return os; } }; int main() { cout << wf(10,'*') << 123 << endl; cout << 123 << endl; }
设置输出精度
cout.precision(8); cout.setf()//控制输出格式
添加控制标志
cout.setf(ios::left|ios::hex)
常见输出控制标志:
ios:right,ios:dec(十进制),ios:oct(八进制),ios:hex,ios::showbase(带 前缀,如ox),ios::showpoint(总带小数点),ios::scientific(科学计数法) ios::showpos(positive带符号),ios::uppercase(大写,把十六进制和科学计
数输出A~F时变大写)
cout.precision(2); cout.setf(ios::fixed);//合起来用,设置小数后几位. cout.unsetf(标志)//清除标志
#include <iostream> using namespace std; int main() { cout.width(10); cout.fill('*'); cout.setf(ios::left); cout << 123 << endl; cout.setf(ios::showpos); cout << 123 << endl; cout.setf(ios::showpoint); cout << 123.0 << endl; cout.setf(ios::scientific|ios::uppercase); cout << 1234.0 << endl; cout.precision(2); cout.unsetf(ios::scientific); cout.setf(ios::fixed); cout << 123.0 << endl; cout.unsetf(ios::showpos); cout.unsetf(ios::dec|ios::oct); cout.setf(ios::hex); cout.setf(ios::showbase); cout << 123 << endl; cout << "hello,world" << endl; }
输出控制符
flush:清空缓冲 endl:insert a '\n' ,and clear out buffer oct : set the output as oct dec :十进制输出 hex: 十六进制输出 cout.setf(ios::left);//cout<<left与其等价 setw(宽度) ----> width setfill(填充字符) ---> fill setprecision(精度) ---> precision
注意:要用以上格式要包含头文件<iomanip>
#include <iostream> #include <iomanip> using namespace std; int main() { cout << setw(10) << setfill('~') << left << 123 << endl; cout << hex << showbase << uppercase << 123 << endl; }
===============================================
ofstream fout(文件名,方式/*默认ios::out*/);
默认会清除文件中原内容
打开方式:ios::app(追加内容)
ios::binary:open file in binary mode;原样读写 ios::ate:start reading or writing at end of file ios::in:ipen for reading ios::trunc:truncate file to zero length if it exitsts ios::out:open for writing seekg(位置int);//读定位 seekp(位置int);//写定位 tellp() tellg()//返回当前位置
//既可读也可写
fstream fio(文件名,ios::in|ios::out);
一般提倡读写分开.
+ 保存对象
A a(23);
fout.write((char*)&a,sizeof(a));
有一点如果要保存string对象时要先将其转换成c_str风格再转.
因为string里是一个指针,它的长度是4,如果保存的话会是一个地址,是毫无意
义的.
用法:fout.write((char*)strngObj.c_str(),strlen(strngObj));
-------------------------------
* 内部类
在一个作用域范围内定义的类叫做内部类.我们可以在一个函数里定义一个类
,也可以在一个类里定义一个内部类.
#include <iostream> using namespace std; class A /*全局类*/ { public: class B /*(成员)内部类*/ { }; //int b;//成员变量 }; class B /*可以叫B*/ { }; class D { public : class B { }; }; int main() { class C { };//(局部)内部类 //int c;//局部变量 C objc; A obja; A::B objab;//内部类的访问方法. B objb; D::B objdb; }
内部类的作用:隐藏名字,避免冲突.可以通过其中统一的内部类名来统一各个类
的操作方法.其中最著名的就是迭代器.其实迭代器是类的内部类.
在c++里内部类与外部类毫不相干.
-------------------------------------------------
* 异常
如果不用异常程序各处会出现错误处理代码,使程序显的混乱,而异常处理将会
把错误集中处理,让程序结构清晰起来.
异常是不常见,但无法避免,可预料并作准备.
try { if( 有异常情况 ) throw 数据;//在c++里什么都可以抛 }//监视是否有数据抛出. catch/* 扑获异常 */( 类型 变量名 ) { /* 对异常处理code */ }//catch是用来集中处理错误信息的 catch( 类型 变量名 ) { /* 对异常处理code */ }//可以有若干个catch,对不同的异常进行处理.
c++的异常处理就像小两口打架,想抛什么就抛什么.
//例子,异常处理 #include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { try { ifstream fin(argv[1]); if(!fin) throw 100; char buf[1000]; fin.read(buf,1000); if(!fin) throw 100.0; cout.write( buf, 1000); fin.close(); }catch(double e) { cout << "double:" << e << endl; }catch(long e) { cout << "long:" << e << endl; }catch(...)/*接收所有的异常*/ { cout << "Exception Error!" << endl; } cout << "What a good day!" << endl; }
exception类有一个成员函数what()用来返回描述异常的字符串e.what();
在一个函数里如果有没有被捕获的异常会被抛到调用它的地方.
最终会传到main函数里面.所以我们在main里写上下面语句块:
try { } catch(...) { } 这样就能处理所有的异常.
抛出子类型对象异常,可以用父类对象来进行捕获.当一起进行捕获,但要注意先
后顺序,一般是先catch子类再catch父类对象.
catch( 类型 变量 ) {
throw;
}//处理不了,重新抛出该异常.一般不这么做,偶尔做一做
其中的类型可以是自定义类型,同样可以向外抛.
====================================================
* 重要数据结构与算法
+ 链表
结构中也可以写构造函数,结构与类的区别最主要的区别就是结构中默认的成员
是public型的,而类中成员默认是private型的.其他的大致相同.
基本类型()的值是0
T(),T是基本类型时值是0,T是类时T()会是一个无名对象.
当然编译器有可能会优化程序.
//链表示例 #include <iostream> using namespace std; typedef int T; int main() { struct Node { T data; Node* next; Node(const T& d) : data(d),next(NULL){ } }; Node* header = NULL; cout << "Please input some integers : " << endl; do{ T data; cin >> data; //cout << (int)data << ' '; Node* p = new Node(data); p->next = header; header = p; }while(cin.get()!='\n'); Node* p = header; while(p){ cout << p->data << ' '; p = p->next; } cout << endl; p = header; while(p){ Node* q = p->next; delete p; p = q; } }
//链表类示例程序 //功能:支持增,删,改,查 #include <iostream> using namespace std; typedef int T; class List { struct Node { T data; Node* next; Node( const T& t=T()) : data(t),next(NULL){ } }; //end of struct Node Node* head ; public: List() : head(NULL){ } void insertFirst( const T& t ){ Node* p = new Node(t); p->next = head; head = p; } void travel(){ Node* p = head; while(p){ cout << p->data << ' ' ; p = p->next; } cout << endl; } void free(){ while(head){ Node* q = head->next; delete head; head = q; } } int size(){ Node* p = head; int cnt=0; while(p){ p = p->next; cnt ++; } return cnt; } ~List(){ free(); cout << "~List() called" << endl; } int find( const T& t ){ Node* p = head; int cnt = 0; while(p){ if(p->data==t) return cnt; p = p->next; cnt++; } return -1; } T getHead(){ if(!head) throw "Exception: No head"; return head->data; } T getTail(){ if(!head) throw "Exception: No tail"; Node* p = head; while(p->next) p = p->next; return p->data; } T get( int index ){ Node* p = getPointer(index); return p->data; } bool erase( int index ){ if( 0== index ){ Node* p = head; head = head->next; delete p; return true; } else{ Node* pre = getPointer(index-1); Node* cur = pre->next; pre->next = cur->next; delete cur; return true; } return false; } bool update(const T& old, const T& nw){ int index=find(old); if(index<0) return false; Node* p = getPointer(index); p->data = nw; return true; } private : Node* getPointer(int index){ if(index<0 || index>=size()){ throw "Exception:index out of bound" ; } Node* p = head; for( int i=0; i<index; i++) p = p->next; return p; } };//end of class List int main() { List list; list.insertFirst(1); list.insertFirst(2); list.insertFirst(3); list.insertFirst(4); list.insertFirst(5); list.travel(); cout << "list.size():" << list.size() << endl; cout << "list.find(2):" << list.find(2) << endl; cout << "list.find(9):" << list.find(9) << endl; cout << "getHead:" << list.getHead() << endl; cout << "getTail:" << list.getTail() << endl; cout << "get(3):" << list.get(3) << endl; try{ cout << "get(9):" << list.get(9) << endl; } catch(...){ cout << "Exception" << endl; } //cout << "get(5):" << list.get(5) << endl;//ERROR cout << "------------------" << endl; list.erase(0); list.travel(); try{ list.erase(2); } catch(...){cout << "Exception" << endl;} list.travel(); list.update(1,100); list.travel(); }
发表评论
-
UC++之目录和文件操作
2009-06-05 11:55 1324* UC + 文件系统 - 目 ... -
用c++实现二叉树增删改查和快速排序算法
2009-06-02 13:18 2680//快速排序 #include <iostream ... -
快速排序完整示例
2009-06-01 21:04 1118#include <iostream> usin ... -
C++容器与迭代器
2009-06-01 17:55 2023* 容器的迭代器还有几种: + iterator:正常迭 ... -
c++排序算法与模板和STL
2009-05-31 13:32 1855* 冒泡排序 一轮比较所有相邻数据对,如果顺序不合适就交换, ... -
C++算法与二叉树的实现
2009-05-30 18:35 2552* 输出格式控制 + 成员函数:width fill pr ... -
C++之I/O
2009-05-27 21:26 1898* 重载 + 拷贝构造函数A(const A& o ... -
C++拷贝构造函数与运算符重载
2009-05-26 20:32 2473拷贝构造函数与运算符的重载 * 多态 - 前堤:继承,虚函 ... -
C++多态与类型转换
2009-05-25 17:10 1904c++中字符串的处理,用string进行处理,实际上它是一个类 ... -
类的继承
2009-05-24 09:42 10211,如何定义,实现一个类 ... -
面向对象编程
2009-05-23 19:20 744//倒计时 #include <iostr ... -
C++ 面向对象
2009-05-23 15:40 966* 指针简单总结 //接受命令行参数的函数 int main ... -
C与C++中的time相关函数
2009-05-23 14:03 1333本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所 ... -
c++指针续
2009-05-23 11:16 988//常指针,或叫定指针:指 ... -
C++指针
2009-05-22 19:22 1205C++ 里有字符串类型string ,最大可支持1G,可用st ... -
数组本质
2009-05-21 18:52 1242数组是一片连续的内存空间,定义时一般指明大小和类型,这样编译器 ... -
C++用递归解决汉诺塔问题(续)
2009-05-19 12:16 970#include <iostream.h> ... -
c++ 递归实例二
2009-05-18 22:37 1702#include <iostream.h> ... -
C++用递归解决汉诺塔问题
2009-05-18 21:54 2576递归确实是一个不错的算法,可以将原来很复杂的问题简化.这里要注 ... -
C++ 入门
2009-05-15 21:31 0一次性修改LINUX环境变量:(bash)export $PA ...
相关推荐
这个课件主要涵盖了C++的几个核心概念和技术,包括类和对象、数值输入输出、运算符重载、继承与派生以及指针和数组。下面将详细阐述这些知识点。 1. **类和对象**:在C++中,类是数据和操作数据的方法的集合,是...
C++是C语言的扩展,增加了类、模板、异常处理等高级特性。它支持过程化编程、面向对象编程和泛型编程,因此被广泛应用于系统软件、应用软件、游戏开发、驱动程序等多个领域。 1. **基础语法** - 变量:在C++中,...
综上所述,掌握C++标准类涉及多个方面,包括但不限于理解容器的使用、迭代器的遍历、算法的应用、函数对象的编写、模板的使用以及异常处理的技巧。只有深入学习并熟练运用这些知识点,才能真正地称得上掌握了C++标准...
《达内C++内部讲义大全》是一份深入学习C++编程的重要资料,它涵盖了C++语言中的核心概念以及在Linux环境下进行程序开发的关键知识。这份讲义是著名培训机构达内的内部教学材料,旨在帮助学员全面掌握C++编程技能,...
C++ API的核心是它的标准库,也称为C++ Standard Library,它包含了一系列通用的容器(如vector、list、map等)、算法(如排序、查找、迭代)、输入/输出流(iostream)以及异常处理等功能。这些功能都是通过类和...
封装允许我们将数据和操作隐藏在类的内部,保护数据不被外界直接访问。继承使得一个类可以继承另一个类的属性和方法,实现代码复用。多态则允许不同类型的对象对同一消息作出不同的响应,增强了程序的灵活性。 C++...
这个类可能作为航班类的内部实现,或者作为独立的辅助类。 3. **主函数(Main Function)**:用户交互界面,负责接收用户输入,调用链表类和航班类的方法来执行相应的操作。 4. **输入/输出处理**:C++中的`...
8. **标准库**:C++标准库提供了大量预先定义的类和函数,如输入/输出流(iostream)、容器(如vector和list)、算法(如排序和查找)、智能指针等。`C++ Reference.chm`很可能详细介绍了这些库的使用方法。 9. **...
C++的基础语法包括变量声明、数据类型(如int、char、float、double等)、运算符(算术、关系、逻辑、赋值等)、控制结构(如if-else、switch-case、for、while循环)、函数定义与调用等。在Unix环境下,C++程序的...
- 封装是对象导向的另一个关键概念,它隐藏了类内部的实现细节,只暴露必要的接口供外部使用。 7. **错误处理**: - 程序可能需要处理各种异常情况,例如用户输入非法、商品不存在、库存不足等,这通常通过异常...
异常处理是C++的错误处理机制,确保程序在遇到错误时能够优雅地恢复或退出。 程序设计语言的发展从低级语言到高级语言,经历了从机器码、汇编语言到高级语言的转变。C++作为一款块结构语言,强调封装、数据作用域的...
在C++的初步学习中,首先会介绍基本语法,包括变量、数据类型(如int、float、char等)、运算符(算术、比较、逻辑等)、流程控制语句(如if条件语句、for循环、while循环)以及函数的使用。这些是所有编程语言的...
音像租赁系统是一种常见的软件应用,它主要用于管理音像制品的出租、归还以及相关的会员管理、库存控制等业务流程。在这个C++实现的音像租赁系统中,我们可以深入探讨C++编程语言在构建此类系统时所涉及的关键知识点...
通过try-catch块和自定义异常类,开发者可以更优雅地处理程序中的异常情况。 "多继承"是C++的另一特性,允许一个类继承多个父类,从而实现接口复用和代码共享。然而,多继承也可能带来二义性问题,这部分会讨论如何...
- C++的I/O流库(iostream)提供了处理标准输入/输出的类,如cin和cout。 - 文件流(fstream)允许读写磁盘文件。 通过深入学习以上知识点,你将能够从零开始掌握C++编程,逐步编写出复杂的程序。"C++从零开始....
1. **存储元素的容器**:栈的内部实现可以使用数组或链表,这里我们选择动态数组(`std::vector`)来存储元素,因为它提供了灵活的大小调整和高效的操作。 ```cpp #include class Stack { private: std::vector...
通过访问修饰符(public、private、protected),我们可以控制类的外部如何访问其内部成员,实现数据的隐藏和保护,增强代码的安全性。 2. **指针的使用**:在C++中,指针是直接存储内存地址的变量,它可以用来高效...
本章主要介绍了C++中的流输入输出机制,包括基本的屏幕输入输出、文件读写操作以及如何控制输出格式等。通过实际案例,让读者掌握C++中的I/O操作技巧。 ### 八、模板 #### 知识点: 1. **函数模板**:创建泛型函数...
C++11引入了线程库,可以用来实现并发控制,如互斥量(mutex)和条件变量(condition variable)来保证数据的一致性。 综上所述,"C++实现ATM机"项目是一个全面展示C++特性和OOP概念的实例,涵盖了软件开发的多个...
8. **异常处理**:异常处理是C++中处理错误的一种机制,通过try、catch和throw语句,可以在程序运行时捕获和处理异常,提高程序的健壮性。 9. **文件输入输出**:C++提供了标准库支持文件的读写操作,可以将对象...