C++ Primer学习

阅读: 评论:0

C++ Primer学习

C++ Primer学习

学习要点

  1. 从键盘输入文件结束符:在Windows系统中,输入文件结束符的方法是Ctrl+Z。在Unix系统中,文件结束符使用Ctrl+D。
  2. 成员函数是定义为类的一部分的函数,有时也成为方法。
  3. cerr是一个ostream对象,写到cerr的数据是不缓冲的,常用于输出错误信息或其他不属于正常逻辑的输出内容。
  4. std:标准库所使用的命名空间,std::cout表示我们要使用定义在命名空间std中的名字cout。
  5. 可寻址的最小内存块为“字节”,存储的基本单元称为“字”。字由4个字节或8个字节构成。在一个字节为8byte,字为4字节的机器上,一个字的内存区域如下:
742400111011
742500011111
742600000001
742701000000

其中左侧为字节的地址,右侧为字节的具体内容。

  1. 对象是指一块能够存储数据并具有某种类型的内存空间。
  2. 声明是使得名字为程序所知,定义负责创建与名字关联的实体。
extern int i; //声明i
int j; //声明并定义j
extern int k=3.24; //定义了k
  1. 变量名一般使用小写,如index。类名一般用大写开头,如Student。
  2. 引用并非对象,是为一个已经存在的对象所起的另外一个名字。
int i=2,&ri=i;//ri是一个引用,与i绑定在一起

指针与引用相比的不同点:指针本身是一个对象,允许对指针进行赋值和拷贝,指针在生命周期内可以先后指向几个不同的对象;指针在无需在定义时赋初值。

int i=42;
int *pi=&i;//pi存放变量i的地址,或者说p是指向变量i的指针,&是取地址符
int *pi2=pi;

如果指针指向了一个对象,使用解引用符(*)来访问该对象。

int i=42;
int *pi=&i;//pi存放变量i的地址,或者说p是指向变量i的指针
cout<<*p;输出42


空指针的3种形式:

int *p1=nullptr;
int *p2=0;
int *p3=NULL;//#include<cstdlib>
  1. const限定符的对象一旦被创建后就不能再改变,所以const对象必须初始化。
    对于需要在文件间共享的const常量,只在一个文件中定义const,而在其他多个文件中声明并使用它。解决办法是对于const变量不管是声明还是定义都添加extern关键字,这样只需要定义一次就可以了。
//file_1.cpp
extern const int bufSize=256;//定义并初始化了一个常量,该常量能够被其他文件访问
//file_1.h
extern const int bufSize;//与file_1.cpp中定义的bufSize是同一个

file_1.cpp定义并初始化了bufSize。然而bufSize是一个常量,必须使用extern加以限定使其被其他文件使用。file_1.h头文件中的声明也是由extern做了限定,其作用是指明bufSzie并非本文件所独有,他的定义将在别处出现。

  1. 指向常量的指针不能用于改变其所指对象的值,想要存放常量对象的指针,智能使用指向常量的指针。
  2. 常量指针必须初始化,并且初始化否值就不能再改变。
  3. 头文件保护符依赖于预处理变量。预处理变量有两种状态:已定义和未定义。#define指令把一个名字设定为预处理变量,另外两个指令分别检查某个指定的预处理变量是否已定义:#ifdef当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真。一旦检查结果为真,则执行后续操作知道遇见#endif指令为止。
#ifndef FILE_1_H
#define FILE_1_H
#include <string>
struct Student{string name;string studentNo;int agr;
};
#endif
  1. 使用using声明就无需专门的前缀。using namespace :: name;。如using std::cin;。头文件不应包含using声明以免产生某些冲突。

  2. string对象
    (1)在执行读取操作时,string对象会忽略开头的空白,从第一个真正的字符开始读起,直到遇见下一处空白为止。如果要读取有空白符的一整行字符串,可以使用getline函数,getline会读取到遇到换行符为止,换行符也会被读取进去,但会被丢弃。
    (2)string.size()返回值是一个无符号整数。
    (3)两个string对象比较时,依照字符依次比较,字典序大的字符所在的string对象更大;如果字符相同,那么长度更长的string对象更大。
    (4)字面值和字面值不能相加,string对象可以和string对象或者字面值相加。字面值eg.“hello”。

  3. -> 箭头运算符

  4. 但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

  5. 数组相较于vector,其大小是确定的。数组的维度必须是一个常量表达式。

unsigned cnt=42;
constexpr unsigned tmp=42;
int arr[10]; //正确
int *ptr[tmp]; //正确,42个int型指针
int arr1[cnt]; //错误,cnt不是常量表达式
string arr3[get_size()]; //当get_size是constexpr时正确,否则错误
  1. 字符数组使用字符串字面值来初始化时,要记住字符串字面值最后还有一个空字符“0/”。char arr[3]=“abc”;是错误的,没有空间存放“0/”。数组不能用另一个数组初始化或赋值。

本文发布于:2024-01-28 03:30:45,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063838514470.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Primer
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23