首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
编程语言
> 详细
c++速成,适合有c基础的朋友(2)
时间:
2015-09-05 09:47:29
阅读:
299
评论:
0
收藏:
0
[点我收藏+]
标签:
5.
I/O流————对象和类入门
a.流和基本文件
流 是一个由字符构成的流(flow)。如果流向程序,被称为输入流。如果流出程序,则称为输出流。输入流可能由键盘或文件提供,输出流可以流向屏幕或文件。
cin和cout就是输入输出流的例子。
如果定义了一个输入流:in_stream 这个流来源与某个文件,则:
int the_number;
in_stream >> the_number;
类似的,如果定义了out_stream输出到某个文件中:
out_stream << "the number is" << the_number;
要用一个流来从文件获取数据(或将数据发送到文件中),首先要声明流,然后将流与文件连接起来。可将与流连接起来的文件视为这个文件的值,改变值即改变
连接文件。
声明方式:#include<fstream>
using namespace std;
ifstream in_stream;
ofstream out_stream;
连接方式:in_stream.open("infile.dat"); //可以暂时理解为c语言中的结构体类似的语法。
完成了连接,可以利用输入流读取数据:
int number_1 , number_2;
in_stream >> number_1 >> number_2;
程序的真实文件名只在open函数中使用,其余的时候都使用与之相关的流名。
eg: #include<fstream>
using namespace std;
int main()
{
using namespace std;
ifstream in_stream;
ofstream out_stream;
int number_1 , number_2 ,number_3 ,number_4;
in_stream.open("infile.dat");
out_stream.open("outfile.dat");
in_stream >> number_1 >> number_2 >> number_3 >> number_4;
out_stream << "these are four numbers:" << number_1 << number_2
<< number_3 << number_4 << endl ;
in_stream.close();
out_stream.close(); //将打开的文件关掉
}
b.类与对象入门
流其实就是对象。对象是一个变量,和它关联的既有函数,也有数据。与对象关联的函数称为成员函数。
如果一个类型的变量是对象,这个类型就是类(class)。类是一种类型,他的对象就是变量。
ifstream类和ofstream类都有一个名为fail的成员函数,在打开文件后调用:
in_stream.fail();
如果文件打开失败,会返回一个boolean类型的ture值,用以判断文件是否打开。
eg: int_stream.open("stuff.dat");
if(in_stream.fail())
{
exit(1); //终止程序
}
exit语句:%1.使用时要声明:#include<cstdlib>
%2.如果因为错误而调用exit,实参为1,其余为0。
c.流I/O工具
%1.用流函数格式化输出
可以用于规范程序的输出格式
eg: cout.setf(ios::fixed); //ios::scientific输出的是科学计数法
cout.setf(ios::showpoint);
cout.precision(2);
之前的用于控制小数的输出。
一个十分常用的函数是输出空格的函数:
cout.width(n); //会打印n-1个空格。
%2.操纵元
这里介绍两个操纵元:setw和setprecision
setw(n)和cout.width(n)有相似的作用,只是用法不相同
eg:cout << "Start" << setw(4) <<"1,2,3";
setprecision可以用来控制输出小数小数点的情况。
eg:cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout << "$" << setprecision(2) << 10.3;
要使用操纵元,要包含#include<iomanip>。
流文件可以作为函数的实参,唯一的限制是必须采用传引用参数。
d.字符I/O
%1.get和put成员函数
get函数允许程序读取输入的一个字符,并将它存储到char类型的变量中。每一个输出流都提供了get成员的函数。
eg: char letter;
cout.get(letter);
注:这样的输入方式不会忽略任何的字符,包括换行符和空格符。对这一点要十分注意,以免造成错误。
put函数与get类似,只是put函数用于输出字符型变量。
eg: cout.put(‘a‘);
%2.eof成员函数
in_stream.eof(); //end of file;
这是一个boolean型函数,如果程序越过了文件的末尾,则返回true。可以用来判断是否已经到了文件尾。
%3.预定义字符函数
这里介绍toupper和tolower:
要使用这两个函数必须包含:#include<cctype>
toupper函数返回小写字母对应的大写字母,tolower函数则恰好相反。需要注意的是,这两个函数返回的是int值,故:
cout << static_cast<char>(toupper(‘a‘));
6.
数组
a.数组入门
%1.声明和引用数组:
int score[5]; //数组的声明方式与c相同。
int score[5],max,min; //可以与普通变量一起声明。
数组的引用:
int n=2;
score[n+1]=3; //同样与c语言相同。
注意:数组的引索是从0开始的。编程时可以考虑将数组的长度设置为常量。
eg:const int number_of_score = 5;
int score[number_of_score];
数组引索越界编译是不会报错,可能造成毁灭性的后果,请在引用是注意。
%2.初始化数组:
eg:int children[3]={2,12,1};
如果在声明一个数组时初始化它,可以省略数组的大小。
eg:int children[]={2,12,1};
b.函数中的数组:
%1.索引变量作为函数参数
如果函数的变量是int型的,那么:
int a[4];
int my_fuction(a[3])
%2.整个函数作为函数的参数:
函数可以获取整个数组作为数组的参数。作为形参的整个数组既不是一个传值调用函数,也不是一个传引用调用参数。而是一种新的形参,数组形参。
eg:void fill_up(int a[],int size);
int a[]是一个数组形参。在调用函数时,调用方式如下:
int score[5];
int number_of_score=5;
fill_up(score,number_of_score);
注意,如果函数中的数组形参发生改变,数组实参也会发生改变。因为实际传给函数的是数组第一个元素在内存中的地址。所以通常还需要一个int实参来表示数组的
大小。
%3.const参数修饰符
如果要求在函数的过程中不希望数组被更改,可以使用const函数修饰符。
eg:int my_fuction(const int a[],int number_of_a); //这样的声明在a[]被修改时会编译报错。
%4.返回数组的函数
只用利用指针返回一个数组。
%5.多维数组:
多维数组基础:
声明:eg: int array_number[100][100];
char array_symbol[100][100];
多维数组作为函数变量
形式为char array_symbol[][100]
eg: void display(char array_number[][100],int size_dimension_1);
考虑到多维数组在内存中的存放方式,这样的方式就很容易理解了。
c++速成,适合有c基础的朋友(2)
标签:
原文地址:http://www.cnblogs.com/ustczd/p/4782718.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
Spring Cloud 从入门到精通(一)Nacos 服务中心初探
2021-07-29
基础的排序算法
2021-07-29
SpringBoot|常用配置介绍
2021-07-29
关于 .NET 与 JAVA 在 JIT 编译上的一些差异
2021-07-29
C语言常用函数-toupper()将字符转换为大写英文字母函数
2021-07-29
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
2021-07-28
4-1 YAML配置文件 注入 JavaBean中
2021-07-28
【python】 用来将对象持久化的 pickle 模块
2021-07-28
马拉车算法
2021-07-28
用Python进行冒泡排序
2021-07-28
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!