Skip to content

2.3 C++ 语句的扩展

本节,我们通过一个例子对“程序代码2-2”进行功能拓展。实现在程序运行时输入一个值。为了实现这个功能,我们使用 cin 这是与 cout 对应的,用于输入的流对象。

程序代码2-3
#include <iostream>

using namespace std;

int main()
{
    int age;            //声明 int 类型的 age 变量
    cout << "Please enter the value of age." << endl;
    cin >> age;         //通过键盘输入 age 变量的值

    string name;        //声明 string 类型的 name 变量
    cout << "Please enter the value of name." << endl;
    cin >> name;        //通过键盘输入 name 变量的值

    cout << "My name is: " << name <<", my age is: " << age << endl;

    return 0;
}

程序代码2-3的运行情况如下:

Please enter the value of age.
30
Please enter the value of name.
Zhang San
My name is: Zhang San, my age is: 30

2.3.1 cin 介绍

程序代码2-3表明,我们从键盘输入的值最终被赋给变量(这里是 age 和 name)。分别对应 cin >> age;cin >> age;两条语句。

结合 cout 对象,从这两条语句便可看出,cin 也类似于 cout 表示一种智能流的对象。键盘输入的信息从 cin 流向 age 和 name。iostream 文件将 cin 定义为一个表示这种流的对象。输出时,<< 操作符将字符串插入到输出流中,输入时,cin 使用 >> 操作符从输入流中提取字符。通常,我们会在操作符右侧提供一个变量,用以接受提取到的字符信息(为了便于理解,你可以想象 "<<" 和 ">>" 符号表示信息流的方向)。

3.3.2 类简介(选读)

提示

在本书中,写有“(选读)”的是选读小结或选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必读章节后再单独攻克。

看了足够多的 cincout 示例后,我们可以预习一些有关(面向)对象的知识了。具体来说,本小节将进一步介绍有关类的知识。早在第 1 章我们就曾指出,类是 C++ 中面向对象编程的核心概念之一。

记住

类描述了一种数据类型的全部属性,对象是根据这些描述创建的实体。

类是用户定义的一种数据类型。要想定义类,需要描述它能够表示什么信息和可以对数据执行哪些操作。简单来说,类与对象就好比类型与变量。如果了解其他面向对象编程的术语,就知道 C++ 类对应某些编程语言中的对象类型,而 C++ 对象对应对象实例或者说实例变量。

知道类是用户定义的类型,但作为用户,我们并没有设计 ostream 和 istream 类。就像函数可以来自库,类也可以来自库,ostream 和 istream 就属于这种国内情况。他们并没有被内置在 C++ 语言和编译器中,而更像一种范例。如果愿意,程序员甚至可以修改这些类的定义1。iostream 系列类和 fstream 系列类是早期所有的实现都自带的唯一两组类定义。不过 ANSI/ISO C++ 委员会在 C++ 标准中添加了一些其他的类库。另外,多数实现都在软件包中提供了其他类的定义。事实上,C++ 之所以具有如此魅力,很大程度上是由于存在大量支持 UNIX、Mac 以及 Windows 编程所需要的类库。

类描述制定了可对类对象执行所有的操作,要对特定对象执行这些允许的挫折,需要给该对象发送一条信息。例如,如果希望 cout 对象显示一个字符串信息,C++ 提供了两种发送消息的方式:

  1. 第一种方式是使用类方法(其本质是函数调用,我们会在后面讲到);
  2. 第二种方式就是重定义,coutcin 就是采用重定义操作符的方式。

所以在 cout << "age" << "name" << endl; 语句中,使用重定义的 << 操作符将信息发给 cout

ProgramminIndex

图 1-0-1   向对象发送信息


  1. 虽然从理论上讲,程序员可以尝试修改 ostream 和 istream 等标准库类的定义,但这是一个非常糟糕的做法。
    原因如下:
    稳定性风险:标准库类经过了广泛的测试和验证,其稳定性和可靠性是有保障的。如果随意修改这些类的定义,可能会引入各种不可预测的错误和问题,导致程序的稳定性下降。
    兼容性问题:其他依赖于标准库的代码可能会受到影响。如果修改了标准库类的定义,可能会导致与其他代码的兼容性问题,使得整个项目难以维护和扩展。
    可维护性差:标准库通常会随着 C++ 语言的发展而不断更新和改进。如果修改了标准库类的定义,可能会与未来的版本不兼容,增加维护成本。
    总之,虽然 C++ 提供了一定的灵活性,但在实际开发中,应该尽量避免修改标准库类的定义,而是充分利用标准库提供的功能,以确保程序的稳定性、兼容性和可维护性。 

Comments