【CPP基础】面向对象的编程思想 + 输入和输出相关(一)
引自高翔博士的《视觉SLAM十四将》:
用着用着才发现C++和Linux才是我的真爱。
开始做人工智能和人工智能相关的人和团体越来越多,虽然初期学习中会发现对于绝大多数没有什么编程基础的人来说Python是一个非常便于上手的语言,而且甚多开源构架都有基于Python的接口,所以包括我自己在内都在Python花了不少精力。本文的重点不是要拉CPP和Python掐架,只是CPP里对于各种功能的灵活实现,以及强大的功能对于研究以及开发相关应用实在有太多优势。诚然,CPP可以说是一门最为艰难的语言,木有十年苦工怕是没谁能拍着胸脯说“精通”二字吧。这个【CPP基础】系列,是本人一年前观看李佳雨的CPP课程的笔记的一个review。对的,学习就是这样,不停的review,温故而知新。
1. C++语言简介:
1.1 C++是一种语言,仅仅是它的语法、特性、标准类库就已经是一门非常高深的课程,所以在开始学习的时候,必须先打好基础。
1.2 C++的特点与OO思想:
1.2.1 C++的特点:
※ C语言有一个优点,即它的速度可以很快,写出来的程序可以很精炼、简单、小巧,不用为了解决一个问题浪费太多经历。
※ C和C++相比较,C++就经常会为了解决某个问题绕一个大圈,所以代码量相对较大,并且里边有一些不是必须的代码。
※ 但C++的优势在于它会针对不同的对象进行实例化,这就是所谓的Object Oriented(OO)思想。
1.2.2 OO思想:
※ OO(面向对象)思想:在面对对象的思想中,任何事物都可以被看做一个对象。一个再复杂的模型结构都是由千千万万个对象组成的。这是根本思想。而对每个对象,抽想起来最终可以分为两个要素:属性和行为。
※ 在面对对象编程中,程序员不再面对一个个函数和变量,而是要放眼大局,面对一个个对象来看问题。
※ 每个对象都是一个完整的独立个体,它是由相关的属性和行为组合而成的,与外界分隔。
※ 面对对象是当前软件开发的主流,其概念和引用造诣超越了程序设计和软件开发本身而扩展到更加宽广的范围。
1.2.3 OO实现的特点:
1) 封装:封装意味着把对象的属性和方法结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。
封装是面向对象思想描述的基础,从此程序员面对的就不再是许多复杂函数和过程实现,而是少数具有行为能力的个体实例。
2)抽象:抽象的过程是对具体问题进行概括的过程,是对一类公共问题进行统一描述的过程。为了使某些必要的信息得意顺利的交流,设计者必须进行一个抽象过程,就如同一个协议,一个得到所有参与过冬的有效个体支持的协议。
3) 继承:子类对象拥有与其基类相同的全部属性和方法,称为继承。
4) 多态:多态是指在基类中定义的属性和行为被子类继承后,可以具有不同的数据类型或者表现行为等特性。
2. C++的输入和输出方法:
2.1 在函数调用中,如果形参是一个数组,在传递过程中,从主函数到函数模块传递的是该数组的首地址,也就是说,在这个过程中,该数组被当成指针来处理。
2.2 cout是一个输出流对象,它是“console out(控制台输出)”的缩写。是属于类的对象。ostream类在iostream头文件中定义。输出流就是一个概念。
2.3“using namespace std;”
- 这条指令是C++的一个新概念“命名空间”;
- C++标准库所使用的所有标识符(即类函数、对象等的名称)都是在同一个特殊的命名空间(std)中来定义的。
- 如果没有使用这条指令,将要使用std::cout这样的语法来调用输出流对象。
2.4 “endl”是一个结束标志,否则所有的流都会流向目标。
2.5 重载:C++的的一个特点,具体指允许按照不同的方式使用同一个操作符。
3. 如上程序的分析(C vs C++):
3.1 这个程序使用了流对象cin。这个对象的类型是istream,它知道如何从用户终端读取数据。
3.2 cin >> i;cin输入操作符又称提取操作符,它一次从输入流对象cin提取一个整数。
3.3 当用户进行键盘输入时,对应的字符将输入到操作系统的键盘缓冲区中。
3.4 当用户输入“Enter”时,操作系统把键盘缓冲区的内容传输到cin流的内部缓冲区,“>>”操作符随后从这个缓冲区提取需要的信息。
3.5 阻塞:如用户不进行键盘输入,程序会阻塞的特性。这里是(blocking)IO阻塞。
3.6 “>>”最初定义为右移操作符,它在C++中进行了重载,当它按照这里所示的方式使用时,它就用于从输入流对象提取信息。
这个操作符对所有内建数据类型都进行了重载,所以它可以从输入流对象提取出int,float,double型数据,也可以提取字符串数据。
3.7 在语句while(cin >> i)中,表达式cin >> i返回输入流对象本身,也就是cin。但是,如果到达了文件尾或者提取操作符遇到一个非法值,这个返回值将是false(一般false就是0)。
3.8 C和C++在声明变量的事实上有点不同,C++允许在程序的任意位置声明变量。这提高了大型C++程序的可读性,因为这样子就可以在实际需要使用变量的时候才来声明它们。