C++ Primer Plus 阅读摘要

C++预备概念

  1. 对象是类的特定实例,类定义了数据的存储和使用方式。
  2. 类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。

初入C++

  1. 变量命名规则推荐

    str或sz表示一空字符结束的字符串,b表示布尔值,p表示指针,c表示单个字符

  2. 头文件climits中包含关于整型限制的信息(以符号常量形式定义)

    如 INT_MAX 为 int 的最大值,CHAR_BIT 为 char 的位数

  3. C++特殊的初始化语法(syntax)——大括号初始化器(列表初始化

     int emus(432);   //	set emus to 432
     int emus{7};   	//	set emus to 7
     int emus{};	// set emus to 0
     float balances[100] {};	// all elements to 0
     char tlifs[4] {'h', 'i', 112, '\0'}; // 相当于中间加 = 
    
  4. sizeof 运算符可对类型名(放置括号中)或变量名(直接跟在sizeof)后面进行计算

  5. cout << hex; 不在屏幕上显示任何内容,只修改cout显示整数的方式(此为以十六进制方式显示)

  6. cin.get()等价于getchar();cout.put()等价于putchar()

  7. 'A’为65,‘a’为97,’ '为32,'0’为48

  8. 通常cout会删除结尾的零,使用cout.setf()可以覆盖这种行为,添加一条语句

    cout.setf(ios_base::fixed, ios_base::floatfield);
    

    代码测试
    结果

  9. 求余操作%满足,(a/b) * b + (a%b) = a

复合类型:string & array & vector

  1. 只有在定义数组时才可以初始化整个数组,其他时刻不可,但可以使用下标分别给数组中的元素赋值

  2. C++中可读取一行的函数有cin.get()和cin.getline()。

    二者区别:碰到空白——换行符,getline()读取并用’\0’替换,而get()不读取不替换,留在输入队列中。

  3. C++的string类——表示字符串的实体

    • 赋值、拼接操作

        string a, b;
        a = b; // 可以实现将一个string对象 b 赋给另一个string对象 a;
        a += b; // 可以实现string对象 b 附加到string对象 a 的末尾。
      
    • 获取大小

        string str;
        len = str.size();	// 此语句就相当于C语言中的len = strlen(str1);
      
    • 读入输入的字符串,根据输入字符串的长度自动调整自己的大小

        getline(cin,str); //可以获取一行字符串到string类 str 中,
      
    • 判断是否不一样

        a != b; // a, b 至少有一个是 string 对象
      
  4. C++允许在声明结构变量的时候省略关键字struct,两个相同结构的结构变量可以直接赋值,提倡使用外部结构声明,不提倡使用外部变量

  5. 在对指针应用解除引用(*)之前,必须将指针初始化为一个确定的、适当的地址。

  6. 使用 new 和 delete 时应当遵守的规则( malloc 和 free )

    1. 不要使用 delete 释放不是 new 分配的内存。
    2. 不要使用 delete 释放同一个内存块两次。
    3. 如果使用 new []为数组分配内存,则应使用 delete []来释放。
    4. 如果使用 new []为一个实体分配内存,则应使用 delete(没有方括号)来释放。
    5. 对空指针使用 delete 是安全的。
  7. 不能用 sizeof 运算符来确定动态分配的数组包含的字节数

  8. 数组名被解释为其第一个元素的地址,而对数组名应用地址运算符(&)时,得到的是整个数组的地址。

  9. 使用数组声明来创建数组,int data[10]; 将采用静态联编,即数组的长度在编译时设置
    使用 new[] 运算符创建数组时,int *pz = new int [size]; 将采用动态联编,即在运行时为数组分配空间,其长度也在运行时设置,对应的用 delete [] 释放其占用的内存。

  10. 模板类vector是动态数组的替代品,array是定长数组的替代品。

    • 模板类vector: 声明创建一个名为vt的vector对象,可存储n_elem(可以是变量)个类型为typeName的元素

         vector<typeName>  vt(n_elem);
      
    • 模板类array: 声明创建一个名为ar的array对象,包含n_elem(不能是变量)个类型为typeName的元素

        array<typeName, n_elem> arr;
      
    • array对象和数组存储在相同的内存区域(栈),vector对象存储在自由存储区或堆中;可以将一个array对象赋给另一个array对象,而对于数组必须逐元素复制数据。

循环、分支语句 & 关系、逻辑运算符

  1. 前缀格式(如 ++x )比后缀格式(如 x++ )效率高:

    • 前缀++:将值加1,然后返回结果
    • 后缀++:先赋值一个副本,将其加1,然后将入职的副本返回
  2. 优先级:前缀递增、前缀递减和解除引用运算符优先级相同,以从右到左方式结合;后缀递增和后缀递减的优先级相同,但比前缀运算符优先级高,以从左到右方式结合。

  3. 基于范围的 for 循环(简化了一种常见的循环任务:对数组或者容器类,如 vector 和 array 的每个元素执行相同的操作。

     double prices[5] {4.99, 10.99, 6.87, 7.99, 8.49};
     for (double x : prices) //x表示最初prices的第一个元素,然后循环显示数组中的每个值
     	cout << x << std::endl;
     for (double &x : prices) //修改数组中的元素
     	x = x * 0.80;
    
  4. cin.get(ch) 与 cin.get()

    属性cin.get(ch)ch = cin.get()
    传递输入字符的方式赋给参数 ch将函数返回值赋给 ch
    用于字符输入时函数的返回值istream对象(执行bool转换后为trueint 类型的字符编码
    达EOF时函数的返回值istream对象(执行bool转换后为falseEOF
  5. 头文件 < cctype > 中的字符函数

    函数名称返回值
    isalnum()如果参数是字母或者数字,返回true
    isalpha()如果参数是字母,返回true
    iscntrl()如果参数是控制字符,返回true
    isdigit()如果参数是数字,返回true
    isgraph()如果参数是除了空格之外的打印字符,返回true
    islower()如果参数是小写字母,返回true
    isprint()如果参数是打印字符(包括空格),返回true
    ispunct()如果参数是标点符号,返回true
    isspace()如果参数是标准空白字符,如空格、进纸、回车、制表符,返回true
    isupper()如果参数是大写字母,返回true
  6. 文件 I/O 的主要步骤:(使用完文件用 close() 方法关闭)

    • 包含头文件 fstream
    • 创建 ifstream 和 ofstream 对象; // ofstream outFile;
    • 将 ifstream 和ofstream 对象同文件夹关联起来; // outFile.open(“xxx.txt”);
    • 像使用 cin 和 cout 那样使用该 ofstream 对象
  7. 有一个 char 类型变量 ch,++ch的类型是 char , ch + 1 是 int 类型

函数

  1. 函数返回值类型不能是数组,但可以是其他任何类型——整数、浮点数、指针、结构、对象,其中可以将包含数组的结构或对象当作返回值。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值