原创 C++输入/输出流(2)

2018-2-25 08:26 1922 17 2 分类: 软件与OS 文集: C++学习记录(1)

1. get()函数

#include<iostream>

using namespace std;

int main()

{

    char s1[80], s2[80];

    cout << "输入一个字符:";

    cout << cin.get() << endl;

    cin.get();

    cout << "输入一个字符串:";

    for (int i = 0; i < 80; i++)

    {

        cin.get(s1);

        if (s1 == '\n')

        {

            s1 = '\0';

            break;

        }

    }

    cout << s1 << endl;

    cout << "输入一个字符串:";

    cin.get(s2, 80);

    cout << s2 << endl;

    system("pause");

    return 0;

}

Get()函数有许多形式,其重载后的形式可包含参数,其返回类型也可为字符串,在实际程序中一般用不带参数的形式更多。

2. getline()函数

getline()函数也可以实现一个字符串的获取,其格式:

isstream& getline(char*, int, char)

这个函数从流中抽取字符直到终止符,或抽取字符达到参数给定的数量,或已到文件尾,将其存储在第一个参数指定的字符数组里。如果发现终止符,则从流中提取终止符,将它抛弃,并不把它存在结果缓冲区里。

#include<iostream>

using namespace std;

int main()

{

    char s1[80];

    cout << "输入一个字符:";

    cout << cin.get() << endl;

    cin.get();

    cout << "输入一行字符串:";

    cin.getline(s1, 80);

    cout << s1 << endl;

    system("pause");

    return 0;

}

Getgetline都可以给参数赋值,在输入字符和字符串时,C++会有一个结束字符“\0”,用get()函数输入时,会在参数中留下这个字符,getline则不会。

 3. put()

它用于输出一个字符。

cout.put(‘H’);

cout.put(‘H’).put(‘\n’);

put函数返回调用put的对象的引用。也可以用ASCII码值调用put,如:cout.put(65)输出字符‘A

4. read()write()

它们可实现无格式输入/输出,这2个函数分别把一定量的字符写入字符数组和从字符数组中取出。这些字符都是未经任何格式化的,以原始数据输入或者输出。如:

char buffer[]=”happy birthdy”;

cout.write(buffer,10);

输出buffer中的10个字符“happy birt”。因为字符串就是第一个字符的地址。

Read()把指定个数的字符输入到字符数组中,如果读取的字符个数少于指定的数目,可以设置标志位failbit。成员函数gcount()统计最后输入的字符个数。

下面演示了istream中成员函数readgcount,类ostream中成员函数write的使用。

#include<iostream>

using namespace std;

int main()

{

    const int SIZE = 80;

    char buffer[SIZE];

    cout << "输入一个字符串:";

    cin.read(buffer, 10);

    cout << "\n已经输入的字符串是:\n";

    cout.write(buffer, cin.gcount());

    cout << endl;

    system("pause");

    return 0;

}

5.  其他成员函数

Istream类中的其他成员函数ignore,putback,peekIgnore用于在需要时跳过流中指定数量的字符(默认个数是1),或在遇到指定分隔符(默认EOF,使ignore在读文件的时候跳过文件末尾)时结束。

成员函数putback将最后一次用get从输入流中提取的字符放回到输入流中。Peek返回输入流中的下一个字符,但并不将其从输入流中删除。

6. 用户自定义数据类型的输入\输出

通过重载运算符“<<”和”>>”实现。

6.1重载“<<”的一般形式为:

Ostream  &operator<<(ostream &stream,类名 对象名)

{//操作代码   return stream;}
其中第一个参数stream是对ostream对象的引用,必须是输出流,它可以是其他合法的标识符,但是必须和return后面的标识符相同,第二个参数是将被输出的对象。重载输出运算符“<<”要注意:

(1)重载输出运算符不能是类的成员函数,可以是普通函数或者类的友元函数;

(2)如果重载输出运算符函数要访问类的非公有成员,要把它定义为类的友元函数。

#include<iostream>

using namespace std;

class Point

{

private:

    int x, y;

public:

    Point():x(0),y(0){}

    Point(int a,int b):x(a),y(b){}

    friend ostream &operator<<(ostream &stream, Point obj);

};

ostream &operator<<(ostream &stream, Point obj)

{

    stream <<"x=" << obj.x << "  " << "y= " << obj.y << endl;

    return stream;

}

int main()

{

    Point p1(1, 2), p2(3, 4);

    cout << p1 << p2;

    system("pause");

    return 0;

}

6.2   重载输入运算符“>>

Istream &operator>>(istream &stream,类名 对象名)

{//操作代码  return stream;}

第一个参数stream是对isream对象的引用,必须是输入流,它可以是其他合法的标识符,必须与return 后面的相同。重载输入运算符注意:

(1)重载输入函数不能是类的成员函数,可以是普通函数或类的友元函数;

(2)如果重载输入运算符函数要访问类的非公有成员,要把它定义为类的友元函数。

#include<iostream>

using namespace std;

class Point

{

private:

    int x, y;

public:

    Point():x(0),y(0){}

    Point(int a,int b):x(a),y(b){}

    friend ostream &operator<<(ostream &output, Point obj);

    friend istream &operator>>(istream &input, Point &obj);

};

ostream &operator<<(ostream &output, Point obj)

{

    output << "x= " << obj.x << "  " << "y= " << obj.y << endl;

    return output;

}

istream &operator>>(istream &input, Point &obj)

{

    cout << "输入x,y的值:" << endl;

    input >> obj.x;

    input >> obj.y;

    return input;

}

int main()

{

    Point p(10, 20);

    cout << p;

    cin >> p;

    cout << p;

    system("pause");

    return 0;

}


文章评论1条评论)

登录后参与讨论

肖骁 2018-3-8 17:25

谢谢博主的分享
相关推荐阅读
LoneSurvivor 2018-02-23 12:19
C++输入/输出流(1)
1. 输入/输出流类层次 C++的输入/输出流类库是用派生方法建立起的,它有2个平行的基类,streambuf和ios。其他的流类都是从这两个基类直接或间接派生的。1.1   s...
LoneSurvivor 2018-02-19 11:36
C++多态(4)——特殊运算符重载和类类型转换
1.“++”和“--”的重载     运算符“++”和“--”的重载要区分前置和后置两种形式。如果不区分前置和后置,则使用operator++()或operator—()即可,否...
LoneSurvivor 2018-02-12 11:15
C++多态(3)——运算符重载
1.     运算符重载的定义     运算符重载也是实现多态的一个重要手段。运算符重载实现的是编译时的多态,即静态多态性。C++预定义的...
LoneSurvivor 2018-02-12 10:31
C++多态(2)——纯虚函数与抽象类
   抽象类是一种特殊的类,它提供了统一的操作界面。建立抽象类是为了多态地使用抽象类的成员函数。抽象类是包含纯虚函数的类。 1.     ...
LoneSurvivor 2018-02-11 16:24
C++多态(1)
1.     多态      多态是人类思维方式的一种直接模拟,多态性是指不同对象接收到相同的消息时,根据对象类的不同而产生不同...
我要评论
1
17
关闭 站长推荐上一条 /2 下一条