C++ Prime Plus 学习日志 编程学习的起点

C++ Prime Plus 学习日志 编程学习的起点,第1张

C++ Prime Plus 学习日志 编程学习的起点

个人认为都大二下了有必要完全掌握一门语言
补充:此次学习会完成课后习题的代码实现过程,在完成该书学习后会进行一些算法训练

算法设计与分析

章节目录

一些碎碎念一章、预备知识二章、开始学习c++第三章 处理数据第四章、复合类型


一些碎碎念

因为基础薄弱,我在一些编程课程上有所落后,大一的C语言成绩产不忍赌,大二数据结构也只是靠着笔试勉强拿了90。故计划在寒假进行系统的编程学习(完全是因为考试时憋不出来题,bug多如狗打击到我了,所以计划在寒假学完C++,和计算机算法设计与分析这两本书)。大二上通过努力学期加权也是提到了90,为了2022有一个全新的开始我会在寒假好好纠正自己的学习习惯,也会在博客记录自己的学习状态(纯粹是为了获取一些充实感…),希望偶然看到这段话的人在2022年可以全力以赴,成就最好的自己。与诸君共勉!
下附本人大二寒假学习思维导图(完善中)2022年1月6日晚七点

一章、预备知识

c++具备硬件 *** 作的能力,发展了新的编程模式-----面向对象编程。
C语言具有低级语言的效率,硬件访问能力,高级语言的通用性,可移植性。
计算机语言处理 数据与算法,对数据的处理就好比厨子拿着原料(数据)用菜谱(算法)做菜。
早期程序语言随意使用分支语句,执行路径复杂,很难理解,很难DEBUG因此引入了结构化编程
for while do while if else 。
c语言鼓励开发程序单元,函数表示各个任务模块,结构化编程反映了过程性编程的思想,根据执行的 *** 作构思程序。
面向对象编程
过程性编程是试图使问题满足语言的过程性方法,OPP是让语言来满足问题的要求,理念是设计与问题的本质特性相对应的的数据格式

类是一种规范,描述了数据格式,特征。
类规定了可使用哪些数据表示对象,以及可对对象进行的 *** 作
比如描述一个可以绘制圆形的类
数据部分应包括,圆心坐标,半径长
定义的 *** 作部分包括旋转扩大,改变颜色等等,因此当使用程序绘制圆时,依据类创建一个对象,该对象保存了所有的数据。
OPP程序设计方法首先设计类
对象
对象是一举这种规范构造的特定数据结构
多态
多态为 *** 作符和函数创建多个定义,通过编程上下文确定使用哪个定义
opp提供了高级抽象,C提供了硬件访问
源代码 编译 链接
源代码,即单纯的代码文件
编译 运行一个程序,将源代码翻译成机器主机使用的内部机器语言。包含了翻译后的程序的文件就是程序的目标代码
链接 将目标代码和其它代码链接起来,比如C++中的库函数,标准启动代码等等
c++源代码扩展名cpp
Linux编译和链接学完Linux后补充
改BUG时先改前面的,该行没有找上一行,写程序时尽量建立检错语句
在按下ENTER前,键盘信息不发送给程序,ENTER键被 cin.get()接收,不被处理

二章、开始学习c++

cout cin
cout<<" "在引号中输入字符直接输出,cout<< 变量;输出变量所声明类型的值
cin >>a;信息由键盘流向变量,cin也可以将输入数据转化为变量所定义的形式
c++中换行符和空格是可替换的,当输出太长时,可分行输出。最后仍输出在同一行
cin cout 可理解为 *** 作符 *** 作对象,即<< >>表示信号控制对象进行 *** 作 重新定义 *** 作符法发送信息,另一种发送信息的方法为函数 (类)<<相当于函数 ,后面的数据相当于参数。
c++不允许在函数定义中定义函数
关键字不能作为函数名 或变量名
为了使每个函数都能访问STD,将编译指令using namespace std;放在函数外
函数
一般变量定义在第一次使用它之前比较方便

第三章 处理数据

主要内容包括
1.c++变量命名规则
2.各种整形的数字常量
3.使用const限定符创建符号常量
4.C++内置浮点类型 ,算数符 , 类型转换
C++命名应提倡使用有一定含义的变量名

位与字节
内存基本单元bit 8位内存块可以表示-128-128 OR 0 -255
字节BYTE通常指8位内存单元 字节是描述计算机内存量的度量单位
字符集取值数目必须等于或超过字符数目 基本字符集通常是ASCLL 可用8位内存容纳,更大的字符集如UNICODE16位 32位
sizeof() 求字节数,一字节相当于8内存单元
#define 定义你符号常量 c++有一种更好的定义方式使用关键字const
无符号类型 优点增大存储最大值 无符号位
unsigned int a;
超越最大值会出现什么状况?32767 +1=-32768 0-1=65535 即写程序时注意上溢下溢这两种情况
longlong类型为64位
int 被计算机自然的设置为处理最高效的长度
如果变量不可能为负,可以使用无符号类型,变量可能值大于16位,选择long类型,值特别小使用short节省内存
只需要一个字节可选用 char
控制符 dec hex oct 分别用于指示cout输出10 16 8进制格式数
cout < c++默认将整形常量存储为INT型

char类型
专门为存储字母设计的
通过使用字母的数值编码实现
由于大多系统支持字符不超过256种,所以用一个字节就可以表示所有字符,char也可以用作比short更小的整形
存储在变量中的一定是数字因为只有4个单元表示信息,计算机通过cout cin建立起数字与字符间的联系
对字符单引号,字符串双引号
单引号加字符表示字符的数字编码
bool类型非零为真,0为假
const限定符
const int MOOTH=12;应在声明中对const进行初始化
const作用很多,这将在之后讨论。
浮点类型
浮点数可表示非常大的数非常小的数和小数
3.45E6表示3.45*10的6次方
float double long double
float至少32位 double至少48位通常分别为32 64 位指数范围至少-37-37
值超过百万位时切换为E表示法,默认设置还会删去结尾0
由于有缩放因子浮点数可表示数范围很大,但运算速度慢精度低
类型转换
高位到低位转换不安全
浮点值转换为整形计算机将舍去小数部分
表达式中的转换 计算表达式时 char bool signed char 转换为int
int +float向高位转换

第四章、复合类型

本章关键词:数组,字符串,结构体,指针,动态内存,动态数组

初始化数组值 int A[3]={20,30,5}
如果不进行初始化数组的初始值不定
16章将讨论STL和模板类vector
字符串
c++输入字符串进字符数组会自动在后面加上空字符
初始一个字符串char fish[]="Bubbles";
在确定存储字符串所需的最短数组时,注意将结尾空字符计入在内
区别’s’ "s"后面是一个字符串有

注意理解下面代码//
char shirt_size="S";//这句话相当于把一个字符串名也就是指针赋值给变量

strlen只计算可见字符长度不计算空字符
char a[100];
cin>>a;
注意当输入 cin以空格换行确定字符串的界所以只读入I时就在后面添加了,通过cin输入很容易越界
面向行的字符串输入
getline()
该函数读取整行,通过回车键确定结尾,cin.getline(name,20)参数为20表示最多输入19个字符,剩余空间存换行,该函数实现了将一行读入name数组,当遇到换行或读取指定数目的字符后停止读取。
通过换行符确定行尾但不保留换行符

char a[100]; 
    char b[100];
    cin.get(a, 50);//换行符不舍//不带任何参数读取换行符
    //cin.get();接收换行符才能让两个字符串都能够输入数据
    cin.get(b, 50);

、0    cout << b;//注意这种函数,不接受换行符,换行符在队列种,进到第二个字符串里了,然后直接结束

混合输入数字和面向行的字符串会导致问题

//比如先读入一个数字变量再读入一个面向行的字符串
int year;
cin>>year;
char address[80];
cin.getline(adress,80);//由于输入年份后,换行符停留在队列中,cin.getline()会把一个空字符串赋值给adress数组

cin>>year;
cin.get();//接收换行符

c++sring类
在很多方面,使用string对象的方式与使用字符数组相同,string对象和字符数组的主要区别是可以将string对象声明为简单变量,而不是数组。
类设计让程序可以自动处理string的大小

string  str1;//初始长度调整为
string  str2="muyahan"

可以这么理解
从理论上说,可以将char数组视为一组用于存储一个字符串的char存储单元,而string变量是一个表示字符串的实体
使用类对象的一些优势
1.可以将一个类对象的赋值给另一个类对象
2.可以使用 *** 作符+将一个类对象附加到另一个末尾
比如下例

#include 

using namespace std;
int change(int n);
int main()
{
    string str1="muyahan";
    string  str2="happy everyday";
    string str3 = str1 + str2;
    cout << str3;
  
 
    return 0;
}


string类的其它 *** 作
C语言中的strcpy strcat

string str1;
string str2;
str1="muyahan";
str2=str1;
char stri1[15]="muyahan"
char stri2[15];
strcpy(stri2,stri1);

使用字符数组时总是存在目标数组过小,无法存储指定信息的危险,而string类具有自动调整的功能
类函数计算长度
str1.size();
strlen()是一个常规函数,它接收一个c风格字符串作为参数,size功能与其相同但语法不同,str1代表是一个对象,size()是一个类方法
对于未初始化的数组内容定义是随机的,第一个出现空字符的位置也是随机的,未被初始化的string对象初始长度也为零
cin.getline()这种句点表示法说明函数getline是istream类的一个类方法(cin是一个istream的一个对象)
cin.getline(charr,20)第二的参数避免数组越界。
而将一行输入到类中getline(cin,str)//就是从键盘中查找数据的意思呗这里没有使用句点表示法,说明这个getline不是类方法,它将cin作为参数指出到哪里去查找输入,另外也没有指出字符串长度的参数,因为string对象自动调整大小。

#include 
#include //包括了一个类
using namespace std;
int change(int n);
int main()
{
    string str1;
    getline(cin, str1);
    cout << str1;
  
 
    return 0;
}


结构(这书真厚啊)1.9日
可以将string类对象用于结构体之中
成员赋值-如何传递和返回结构-第七章函数介绍
结构赋值
即可以对两个同类型结构体进行整体赋值
可以同时完成定义和创建结构体变量的工作。

struct student
{
int class;
}myh;

共用体可以使用共用体变量存储 int long double 条件是在不同的时间进行

union one4all
{
int  int_val;
long long_val;
double double_val;
};

共用体成员名称标识了变量的容量,共用体的长度为其最大成员的长度
共用体的用途:当数据项使用多种格式但又不会同时使用时可以节省空间
比如存密码有些是纯数字有些时纯字母

union card
{
int card_num;
char card_char[20];
}card;

枚举
C++中的enum工具

enum spectrum{red,orange,yellow,green,blue,violet};
//spectrum为新类型名称,该名称被称为枚举,red,orange作为符号常量对应整数值0-7
spectrum band;
band=blue;//在不进行强制类型转换时,只能将定义枚举时使用的没巨量赋值给这种枚举变量

枚举量是整形,可被提升为int 类型,但 int类型不能自动转换为枚举类型
比如 band=3;错误
band=green;正确
对枚举量进行算术运算会转换为Int类型
之后可通过强制类型转换赋值给枚举变量
band=spectrum(3);
枚举更常被定义相关的符号常量,比如swich语句中的符号常量

enum{red,orange,yellow,green,blue,violet}//只使用枚举

指针和自由存储空间
c++使用关键字new请求正确数量的内存以及使用指针来跟踪新分配内存的位置
指针名表示地址, *** 作符被称为间接值或解除引用 *** 作符,将其用于指针,可以得到该地址存储的值
对每个指针变量名都需要使用一个

int m=5;
int*y=&m;//指针值的初始化

指针的危险
创建指针时会分配存储地址的内存,但不会分配存储指针指向数据的内存,为数据分配内存是一个独立的步骤
比如下面的出错语句

long*fellow;//只分配了地址内存未确定地址的值
*fellow=233;//指向的值可没有分配内存

一定要在对指针应用解除引用 *** 作符*前将指针初始化一个确定的适当的地址

如何用指针管理运行阶段的内存空间分配
变量是在编译时分配到有名字的内存,指针只是为可以通过名称直接访问的内存提供了一个别名。指针真正牛在可以在运行阶段分配未命名的内存存储值。在运行阶段只能通过指针访问内存。

int*pn=new int ;

pn指向的内存没有名字,称pn指向一个数据对象,该内存不是一个变量
似乎处理数据对象的指针方法不太好用,但它使程序在管理内存方面有更大的控制权
delete
释放指向的内存,但不删除指针本身,可以将指针指向另一个新分配的内存
使用new创建动态数组
对大型数据应使用new,如果一个程序是否需要数组由我提供的信息决定,定义数组将始终占用一块内存。在程序运行的过程中创建的数组叫做动态数组

int*psome=new int[10];//申请一个长度为10的int动态数组
delete[]psome;//对应的释放格式,方括号代表释放整个数组

使用new delete时的规则
1.不要使用delete删除不是new分配的内存
2.如果使用new[]为数组分配内存,应使用delete[]来释放
3.对空值指针使用delete是安全的
4.不能使用sizeof *** 作符确定动态分配的数组包含的字节数
使用动态数组
可以把指针数当作数组名使用-指针的数组表示法

p3=p3+1;//数组与指针的根本区别,数组名的值不发修改,但指针可以修改,指针值加一代表指向数组下一个元素的指针

指针数组指针算术
指针值加一增加的量等于它指向类型的字节数、
c++将数组名解释为地址
在大多数情况下,C++将数组名解释为数组第一个元素的地址

wage=&wage[0];
*(a+1)=a[1]//等价

总结:在很多情况下可以相同的方式使用指针名和数组名,都可以使用数组方括号表示法,区别是指针值可以修改,数组名是常量。
对数组使用sizeof得到数组长度 多少个字节
指针与字符串
如果给cout提供一个字符的地址,则它将从该字符开始打印,知道遇到空字符为止

char flowers[10]="rose";
cout< 

动态结构访问成员
比如创建了一个结构体指针,不能将成员 *** 作符作用于结构名,可用箭头成员 *** 作符->
如果结构标识符是结构名使用句点 *** 作符,是指向结构体的指针使用箭头 *** 作符
另一种 *** 作方法为(*a).
动态分配内存处理多个字符串
设计函数输入一个字符串,返回其副本的地址

char*getname()
{
 char temp[80];
 cin>>temp;
 char*pn=new char[strlen(temp)+1];
 strcpy(pn,temp);
 return pn;
 }

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5702290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存