该笔记及代码参考:小甲鱼,
B站:B站UP主鱼C_小甲鱼
网址:小甲鱼网站
书籍:《C++编程自学宝典》
文章目录
前言
因为学习需要,最近系统性地看完了小甲鱼在B站上的“C++快速入门”视频,特此记下笔记及部分代码,方便后续查阅。(之前因为复试,有学习过小甲鱼的C的视频,觉得它的知识输出条理非常清晰,所以这次C++又选择了小甲鱼的视频去观看!!支持!!)
一、C++语言及OO思想介绍
- C++:面向对象(Objected Oritened, OO)。每个对象都可以抽象为两个要素:属性和行为。该思想特点:1、封装;2、抽象(对一类公共问题进行统一描述);3、继承(子类对象拥有与基类相同的全部属性和方法);4、多态(在基类中定义的属性和行为倍子类继承之后,可以具有不同的数据类型或表现行为等特性)。
- 面向过程(opp),关注的是对数据进行处理的过程;面向对象(oop)关注的是对数据进行怎样的处理。
二、从一些小程序入手
1.创建预编译头文件
- 该代码将使用C++标准库的流对象进行信息的输入和输出,因此我们将使用<
iostream>头文件。代码中使用字符串类型处理信息输入时,将使用 <
string>头文件。访问C运行库时的time和date函数时,将使用<
ctime>头文件。我们在进行程序开发时候无需对它们进行修改,因此它们是预编译的理想目标。
2.命名空间
- 命名空间提供了一种模块化代码机制,命名空间允许使用唯一的名称标记自定义类型、函数和变量,使用作用域解析运算符。使用关键字namespace来修饰类型、函数和全局变量,并且提供相应的名称。
using namespace std; //指C++标准库所使用的标识符都是在同一个特殊的名字空间(std)中定义的。
3.代码实例
- 问题描述:定义一个数组容纳10个整数,这些整数来自用户输入。计算这些值的累加和、平均值并输出。
- 问题描述:请任意输入一串整数和任意数目的空格,求和并输出。
三、cin/cout的一些使用举例
1.cin()相关的函数
- cin()
当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。读取数据是从第一个非空白字符开始到下一个空白字符结束。
cin>>a;
cin>>b;
cin>>c;
- cin.ignore()和cin.getline ()
- cin.ignore() 是从输入流(cin)中提取一定数目的字符并把提取的字符忽略(ignore)。
cin.ignore(100,'\n'); //在100处或读取到回车后,函数执行停止,将前面输入流的字符连同回车一同清除。一般,把第一个参数设置足够大。
- cin.getline (),允许读取包含空格的字符串。遇到空格后将继续读取,直到它读取至最大指定的字符数,或直到按下了回车键。
- cin.get()和cin.peek()
- cin.get(),是针对char类型的,用来接收一行包含空格的字符串。
cin.get(); //用来获取输入的第一个字符;
cin.get(字符数组, 字符个数n, 终止字符); //从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到终止字符,则提前结束读取。
- cin.peek() 其返回值是一个char型的字符,是指针指向的当前字符。
- cin.gcount()和cin.read()
- cin.gcount(),返回值是计算取得的字符串长度。
- cin.read(),读取指定长度的字符串,它与cin.getline的作用相似,但是cin.read不局限于行,当没读取足够长度的字符串时,还需要输入。
2.cout()相关的函数
- cout.precision(),用于控制输出浮点数的精度;
- cout.width(),用于控制输出的宽度。
3.代码实现:
<小甲鱼>C++实例练习3—cin/cout()相关的函数及使用举例
四、ifstream/ofstream
1.函数说明
ifstream in (char *filename,int open_mode); //第一个变量为文件名称,第二个变量为打开模式。
2.几种常见的打开模式
- ios::in-打开一个可读取文件;
- ios::out-打开一个可写入文件;
- ios::binary-以二进制的形式打开一个文件;
- ios::app-写入的所有数据将被追加到文件的末尾;
- ios::trunk-删除文件原来已经存在的内容;
- ios::nocreate-如果要打开的文件并不存在,那么以此函数调用open函数将无法进行;
- ios::noreplace-如果要打开的文件已存在,试图用open函数打开时将返回一个错误。
ofstream out(“test.txt”,ios::app)
3.以多种模式打开一个文件
ofstream out(“test.txt”,ios::app | ios::out); //使用并行符号
4.代码实现
<小甲鱼>C++实例练习4—将向用户提出一个“y/n”问题并判断其回答
<小甲鱼>C++实例练习5—文件写入及读取
五、函数重载
1.定义
- 函数重载:用同样的名字再定义一个有着不同参数(可以是参数个数的不同,也可以是参数类型的不同)但有着同样用途的函数。当调用这样一个函数时,编译器将尝试查找与提供的参数匹配度最好的那个函数。
2.代码实现
六、复杂的数据类型
1.数组
- 一个C++数组是由可以把许多个同类型的值存储在同一个变量名下。
2.指针
- .对于变量可以用两种方法来对他进行索引:1)通过变量名;2)通过地址。&,取址操作符。
- 创建变量时,系统将分配一些内存块来保存它们的值;每个内存块拥有一个独一无二的地址;变量的地址可以用&variablename语法来取得;可以把地址赋值给一种称为指针的特殊变量;指针的类型必须与由它保存其地址的变量的类型一致。
- 指针和数组。数组的名字同时也是一个指向其第一个元素(基地址)的指针。利用指针访问数组元素函数:reinterpret_cast< unsigned long>(charptr),其中reinterpret_cast运算符是用来处理无关类型之间的转换,它会产生一个新的值,这个值会有与原始参数相同的比特位。
3.结构
- 对象的基础—结构,是一种由程序员定义的、由其他变量类型组合而成的数据类型。适合处理一些具有多种属性的数据。
- 定义一个结构的基本语法是:
struct name
{
Type varname1;
Type varname1;
………
};
- C++对于一个结构所能包含的变量的个数是没有限制的,变量称为该结构的成员,可以是任意一种合法的数据类型。定义结构;用“.”对结构成员进行赋值。也可在声明新变量的同时进行赋值。
- 结构与指针.
通过指针访问结构元素
//定义一个结构
struct FishOil
{
std::string name;
std::string id;
char sex;
}
//创建一个FishOil类型的变量
FishOil Jiayu={
"小甲鱼","fishc_00",'M'};