C++ Primer Plus
第一章 预备知识
C++的编程方式
-
过程性
-
对象
试图将一些特定的有关联的操作进行封装,形成特定的类型,执行的时候去操作它内部的成员函数。 这使得C++在处理数据的时候方便,而且很简洁,要相信封装类的人。
-
泛型
C++的IDE
- 当然得是Visual studio啊
第二章 开始学习C++
main()函数
C++淘汰的写法: main() 经典写法: int main()
C++注释
C++注释以 // 为主 /**/这种方式其实是C语言的
换行
cout<<endl cout<<"\n" 实际上的区别就在于,endl能保证刷新,而\n则不行
cout和printf()
cout和printf比起来更加的智能和可操作性,可以重载<<针对特殊的类型的输出很友好。
第三章 处理数据
简单变量
-
变量名
只能使用字母,数字和下划线 第一个字符不能是数字 区分大小写 也不能是关键字 命名方式推荐用驼峰形式
-
整型(limits.h/climits)
short,int,long和long long 位与字节 位(bit),字节(byte)通常指的是8位的内存单元
-
无符号类型unsigned
-
选择整型类型
通常,int类型被称为计算机而言最为“自然”的长度。自然长度:也就是计算机处理起来效率最高的长度。
-
字面值表示
cout<<hex; cout<<oct; cout<<dec;
-
char类型:字符和小整数
cout<<和cout.put()的比较 cout<< ‘$’只会输出ASCII表对应的值 cout.put()则会输出字符 wchar_t宽字符类型 wchar_t bob = L'p'; 实际上还有char16_t,char32_t,以满足ISO10646标准
-
bool类型
true和fault
const限定符
const类型最好在声明中就赋值 const的默认空间为当前文件中
浮点数:float,double,long double(cfloat/float.h)
C++算数运算符
-
cout.setf(ios_base::fixed,ios_base::floatfield)设置输出格式
-
类型转换
强制类型转换:(long)value;static_cast(value)
-
auto:处理复杂类型的时候才会体现优势
第四章 复合类型
数组typeName arrayName[arraySize]
-
数组的初始化规则
int cards[4] = {1,2};//未写全的默认为0 int number[4]; cards = number;//不可行的! int car[100] {1,2,3,4,5};//C++的风格
字符串 '\0' 结尾的字符数组
-
visual studio 2019默认的为 -52
-
cout<<"123"<<"5678"//此时第一个字符串的'\0'被第二个字符串的首字符替代
-
string.h(cstring)
char name[MAX]; cin>>name;//此时只能读取一个单词 cin的高级用法在后面学习 读取一行字符串输入
getline()//读取换行符 cin.getline(name,10);//会把换行符替换成'\0' get() //保留换行符在输入缓冲区中 假如有两个连续的get(),则第二个只能读取第一个留在缓冲区中的换行符 std::cin.get(name,10).get();注意的是:cin在输入数字的时候会把换行符留在缓冲区中 sizeof(char const *)//返回结束符号前的元素个数
string类简介
string类和char字符串不同,可以直接通过 + 号去连接两个字符串。 string类的其它操作: 读取大小str1.size(); 输入字符串getline(std::cin, name);//此时并不是cin.getline() 其它形式的字符串 wchar_t str[] = L"hello" char16_t str[] = u"hello" char32_t str[] = U"hello" cout<<R"(这里的内容无需转义字符也可输出符号)"<<'\n;
结构体介绍
假设需要用多种变量去描述一个对象则需要结构体。
-
一般格式
struct StudentSo { int number; float tall; }; -
另起别名
struct StudentSo { int number; float tall; }; typedef struct StudentSo STU; -
无名格式
struct { int n; ... }student; -
结构体数组
单个赋值: name {1,2,"Hello"}; 多个赋值: name{{1,2,"hello"},{3,4,"jjeck"}};
-
结构体的位字段
struct torgle_register { unsigned int SN:4; //SN使用了4bit unsigned int :4; //未使用 bool goodIn :1; bool goodTorgle:1; };
共用体
union one4all
{
int int_val;
long long_val;
double double_val;
};
一般和结构体一起用:
union ID
{
char n[20];
struct MyStruct1
{
int a;
int b;
int c;
}MY1;
};
枚举
enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};
默认是从0开始的。而且只能是整数
指针和自由存储空间
-
指针的危险
long *fellow; *fellow = 233333;//error 指针不知道在哪里存储233333 -
指针和数字
int *pt; pt = 0xB8000000;//强制指针指向0xB8000000 嵌入式用的多 -
使用new
c语言中可以使用 malloc 分配内存 c++也可以使用它或者new
int *p = new int; double* pd = new double;公式如下:
typename * pointer_name = new typeName;-
使用new创建数组
int *p = new int[10] ... delete [] p;
-
-
使用delete释放缓存
int *ps = new int; ... delete ps;
指针、数组和指针算术
多维数组和指针的转换技巧 从左到右进行拆分即可: 1、p[1][2] 2、(p+1)[2] 3、(*(p+1)+2) 多维数组以此类推
-
自动存储
像局部变量,作用域就是包含它的代码。
-
静态存储
static 关键字: static double fee = 56.50
-
动态存储
new 和 delete
数组的替代品
-
vector
#include <vector> vector<int> vi(lem);//lem是元素数量,如果不写默认为0 -
array
#include <array> array<int,5> ai;