Part 1
一 OO思想的特点
1. 封装
封装意味着把对象的属性和方法结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。
封装是面向对象思想描述的基础,从此程序员面对的就不再是许多复杂的函数和过程实现,而是少数具有行为能力的个体实例。
2. 抽象
抽象的过程是对具体问题进行概括的过程,是对一类公共问题进行统一描述的过程。为了使某些必要的信息得以顺利的交流,设计者必须制定一个抽象,就如同一个协议,一个得到所有参与活动的有效个体支持的协议。
例如面包房提供一个抽象——“订单”。
3. 继承
子类对象拥有与其基类相同的全部属性和方法,称为继承。
这个事实上最容易理解:例如人都共有的一些属性:鼻子、眼睛、嘴巴……和一些方法:吃饭、睡觉、*&*&……
可以由此基础上再整出亚洲人、欧洲人、非洲人……
4. 多态
多态是指在基类中定义的属性和行为被子类继承后,可以具有不同的数据类型或者表现行为等特性。
加入动物是一个基类,它的子类有老虎、兔子、狗、小鸟……
那么作为动物有一个行为定义为Move(),那么这些子类继承下来后会根据自己的特性采取不同个性的Move()方式
二 从小程序说起
补充知识
1.关于 system("pause");
简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 。
在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况。
在C语言中一般通过添加getchar();
在C++中一般在main函数中的return之前添加system("pause");这样就可以看清楚输出的结果,pause会输出"press any key to continue. . ."。
system函数原型为 int system(char *command),在windows平台就是执行DOS命令,在linux平台就是执行shell命令
2.关于ungetc( ch, stdin );
此语句用于把getchar从输入流取出的字符放回输入流,以便下次其他操作从输入流中得到字符时不会出现混淆和取错
- size = sizeof(data) / sizeof(data[0]);
用于计算长度
- #include <iostream>
Iostream头文件库 全局命名空间
- using namespace std;
使用命名空间std使得std在以下的所有代码区域都起作用
也可以使用std::cout<<...的输入方法
//cout 是一个输出流对象,它是”console out(控制台输出)“的缩写。是属于basic_ostream 类的对象。ostream 类在iostream头文件中定义。
//它体现了C++的另一个特点:支持重载。重载事实上就是允许我们按照不同的方式使用同一个操作符。我们后边会详细讲解。
或者使用using std::cout ...的输入方法
- std::endl;
相当于是换行符的作用
- C++分析:这个程序使用了流对象cin。这个对象的类为iostream,它知道如何从用户终端读取数据。
1、cin中>>操作符为重载过后的提取操作符,它从输入流对象cin提取一个整数。(当我们从键盘输入数据的时候,对应的字符将输入到操作系统的键盘缓冲区中,当按下“enter”键时操作系统把键盘缓冲区的内容传输到cin流的内部缓冲区,“>>”操作符随后从这个缓冲区提取需要的信息。)
2、cin cout会根据变量的数据类型自动输入或输出一个数值。
3、cin、cout对象的多个方法:cin.ignore(n),n为自然数,作用为输入时忽视n个字符,从第n+1个字符开始输入。
cin.getline(地址,n),n为字节数,将缓冲区的数据中的前n个字符输入到指定的地址。
实际读入的如果是字符组的话它的长度会是n-1,因为有一个\0
cin.peek(),在缓冲区中挑选一个字符进行判断。//只读不拿出来所以不用还回去
cin.get(),在缓冲区中获取一个字符,如果获取成功则返回值为该字符,用于单个字符的赋值。
cin.read(地址,n)将缓冲区的n个字符读取到指定地址中。
cin.gcount( ) 将缓冲区中的字符数作为返回值返回。
cout.write(地址,n)将此地址开始后的n个字符输出。
cout.precision( ) 其实是输出流cout的一个格式控制函数,也就是在iostream中的一个成员函数。precision()返回当前的浮点数的精度值,
而cout.precision(n)其实就是在输出的时候设定输出值以新的浮点数精度值显示,即小数点后保留n位。
cout.width()是获取当前的输出宽度,
而cout.width(n) n为整数则为以当前设定的输出宽度去输入数值。
4.while( (ch=getchar()) == ' ' ) ; // 屏蔽空格
5.while( cin >> i )
在while( cin >> i ) 中,表达式 cin >> i 返回输入流对象本身,也就是cin。但是,如果到达了文件尾或者提取操作符遇到一个非法值,这个返回值将是 false。
我们小举一个例子:如果我们试图把一个浮点数读取到一个 int 型变量中,当提取操作符遇到小数点时,它将使输入流对象置于一个错误的状态中,导致 cin 的值为 false。
二 从另外一个小程序说起(文件类操作,暂时放一下)
1.argc 与 argv[]
在程序中,main 函数有两个参数,整型变量 argc 和字符指针数组 argv[]。
argc 的含义是程序的参数数量,包含本身。
argv[] 的每个指针指向命令行的一个字符串,所以argv[0] 指向字符串"copyFile.exe"。argv[1] 指向字符串sourceFile,argv[2] 指向字符串destFile。
三 输入输出小结
1.cin 对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin 的状态。
eof():如果到达文件(或输入)末尾,返回true;
fail():如果cin 无法工作,返回true;
bad():如果cin 因为比较严重的原因(例如内存不足)而无法工作,返回true;
good():如果以上情况都没发生,返回true。
clear( ); 如果输入错误则能重新输入.结合真正的清空数据流方法
cin.sync( );清空数据流但是不能重新输入
cin.clear(); //更改状态标识符 cin.sync(); //清空缓存区的数据流
四 重载
输入的数据类型不同但是函数名是相同的,注意要和覆盖区分开来