C++ Primer 学习笔记
来源:互联网 发布:软件行业沙龙 编辑:程序博客网 时间:2024/05/16 04:52
1.C++不允许将函数定义嵌套在另一个函数定义中。每个函数都是独立的,所有函数的创建都是平等的。
2.转义字符放在字符串中不需要使用单引号。
3.只有在定义数组时才能初始化,以后就不能使用了,也不能将一个数组赋给另一个数组。
4.C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写作\0,其ASCⅡ码为0,用来标记字符串的结尾。
使用字符数组必须注意,在末尾加上空字符!
5.sizeof操作符指出整个数组的长度(字节数);而strlen()函数返回的是存储在数组中的字符串的长度。另外,strlen()只计算可见的字符,而不把空字符计算在内。同时,strlen()函数需要加头文件#include<cstring>
6.cin使用空白(空格、制表符和换行符)来定义字符串的边界。
按行读取,用cin.getline(arrayname,arraylength)或者cin.get(); 但是前者不保存换行符,而后者保存换行符,并且cin.get()也可以带同样的参数。
cin.get()也可以用来读取并丢弃换行符。
7.使用string类变量,需要加头文件#include<string>
在string类变量使用中,可以用size()方法求字符数,效果和strlen一样。
8.当str为string类变量时,可以用getline(cin,str)将一行读取到string对象中。
9.结构体声明的位置很重要,一种可以是放在main()函数前面,作为外部声明。另一种是放在main()函数中紧跟在开始括号的后面。但提倡使用外部结构声明。
10.共用体union是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。
11.和数组一样,指针都是基于其他类型的。 int *pt = &height; 指的是将指针pt指向height的地址。
12.一定要在对指针应用解除引用操作符(*)之前,将指针初始化为一个确定的、适合的地址。
13.当需要内存时,可以使用new来请求。
int* pt = new int; 将指针pt指向一块int型的空间
14.一定要配对地使用new 和delete,否则会出现内存泄露;只能用delete来释放使用new分配的内存。
15.C++为类型建立别名的方式有两种。一种使用预处理器,另一种是用typedef.
①#define BYTE char //用char替换所有的BYTE
②typedef char byte; //byte是char的别名,有char一样的功能
16.cin处理输入字符时,将忽略空格和换行符;而cin.get(ch)将读取空格字符,并将其赋给变量ch。
17.将一个指针数组初始化为一组字符串常量,使每一个元素都是一个char指针。该指针数组的行为与字符串数组类似。
eg:
const char * cities[3]=
{
“Shanghai”,
“Beijing”,
“Tianjin”
};
18.利用字符函数库cctype可简化操作;例如:isalpha(ch)用来判断ch是否是字母,isdigit(ch)用来判断是否是0~9的数字。
19.写入文本文件:
⑴包含头文件fstream #include<fstream>
⑵创建一个ofstream对象 ofstream outFile;
⑶将该ofstream对象同一个文件包含起来 outFile.open(“carinfo.txt”);
⑷就像使用cout那样使用该ofstream对象
outFile<<”Year:”<<Year<<endl;
20.读取文本信息,也差不多,不过创建的是ifstream对象。
21.C++对于函数返回值的类型有一定的限制:不能是数组,但可以是其他任何类型(可以将数组作为结构或对象组成部分来返回)。
22.我们知道,C++将数组名解释为其第一个元素的地址。其实,数组名就是指针!
记住: ①arr[i]==*(ar+i) ②&arr[i]==ar+i
23.指向常量的指针pt:
intage = 39;
constint * pt = &age; //不能使用pt来修改这个值
将const变量的地址赋给指向const的指针:
constfloat g_earth = 9.80;
constfloat * pe = &g_earth;
注意区别:
intsloth = 3;
constint * ps = &sloth; //允许ps指向另一个位置
int *const finger = &sloth; //允许使用finger来修改sloth的值
24.函数指针与指针函数的区别:
double (*pf) (int); //意味着pf是指向函数的指针
double *pf (int); //意味着pf是指向指针的函数
25.通过引用变量传递参数,函数将使用原始数据,而不是其拷贝。并且,必须在声明的时候将其初始化。例如: int & rodents = rats;
26.函数模板
template <class T> //其中class可以换成typename
void Swap(T &a,T&b){
Ttemp; temp =a ; a = b; b =temp;
}
27.指针数组:数组的内容为指针,即都是一些地址。
例如: double * pd[3]; 返回类型为double *
28.编译预处理:
#ifndef COORDIN_H_
#define COORDIN_H_
... (函数原型、结构声明)
... (或者模板声明、类声明)
... (或者一些符号常量、内联函数)
#endif
注意: 在其他文件中这样引入: #include”coordin.h”
29. int global = 10; //静态变量,链接性为外部,可在其他文件中使用
static int one = 2; //静态变量,链接性为内部,只能在包含上述代码
的文件中使用
voidfunc(int n){
static int count = 0; //静态变量,没有链接性
}
30.在多文件程序中,可以在一个文件(且只能在一个文件)中定义一个外部变量。使用该变量的其他文件必须使用关键字extern声明它。
31.register声明的变量为寄存器变量,这些变量没有内存地址。register说明符提示编译器,该变量的使用频率很高。
32.要创建对象数组,则这个类必须有默认构造函数。
33.不要返回指向局部变量或临时变量对象的引用。函数执行完毕,局部变量和临时变量将消失,引用将指向不存在的数据。
34.操作符重载,如果是非成员函数的话,那么必须声明为友元函数,这样它才能直接访问类的私有成员。
35.静态数据成员在类声明中声明,在包含类方法的文件中初始化。
36.如果方法或函数要返回局部对象,则应返回对象,而不是对象的引用。
37.有两种机制可用于实现多态公有继承:
①在派生类中重新定义基类的方法
②使用虚方法
38.如果在派生类中重新定义基类的方法,通常应将基类方法声明为虚拟的。这样,程序将根据对象类型来选择方法版本。
39.虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。
40.使用类模板:
template<class T>
class Stack{
private:
...
public:
bool push(const T &item);
}
template<class T>
Stack<T>::push(const T &item)
{
}
intmain(){
Stack<int> st;
}
41.字符的输入:
①char info[100];
cin>>info; //read a word
cin.getline(info,100); //read aline,discard \n
cin.get(info,100); //read aline, leave \n in queue
②string stuff;
cin>>stuff; //reada word
getline(cin,stuff); //read a line,diacard\n
42.STL (使用动态内存分配)
STL提供了一组表示容器、迭代器、函数对象和算法的模板。
迭代器其实是广义指针,能够用来遍历容器的对象。
#include<vector>
vector<int> scores;
vector<int>::iterator pr; //声明一个迭代器pr
scores.push_back(temp);
for(pr=scores.begin();pr!=scores.end();pr++)
cout<<*pr<<endl;
几个常用操作:
scores.push_back(temp) 将元素temp添加到容器的末尾
scores.erase(scores.begin(),scores.begin()+2)删除第一和第二个元素
sort(scores.begin(),scores.end()) 升序对scores的内容进行排序
43.new 动态分配数组空间
(一)定义一个整数
int *p =new int;
int *p =new int(4); //赋初值4
(二)定义一个一维数组
int *p =new int[SIZE];
P 指向的为数组的首地址,数组是以int类型为基本单元的,p作为数组名使用
(三)定义一个二维数组
int(*p)[Column]=new int[SIZE][Column]
首先定义一个指针(*p)[Column], 它表示指针是以大小为 Column个int类型 空间为基本单元的, 后面的newint[SIZE]...表示开辟一个SIZE个这样大小的空间
二维数组时,指针是以Column 个int大小的空间为一个基本单元的。
p[0][0] 表示的是第0个这样的基本单元中的第0个元素的值
p[1][0] 表示的是第1个这样的基本单元中的第0个元素的值
因此,声明一个二维数组指针
int (*p)[Column];// p指向[Column]结构,而[Column]结构是以int类型为基准单元的。
44.只有常成员函数才能操作常对象,没有使用const关键字说明的成员函数不能用来操作常对象;
使用const说明的数据成员为常数据成员。如果一个类中说明了常数据成员,只有通过构造函数对该数据成员进行初始化。
45.C++ 中数组的引用作为函数参数
void func(int (&array)[6]){
}
void main(){
int array[6];
func(array);
}
- C++PRIMER学习笔记
- c++primer学习笔记
- c++primer学习笔记
- C++primer学习笔记
- c++primer 学习笔记
- C++Primer 学习笔记
- c++primer学习笔记
- C++Primer学习笔记
- C++PRIMER 学习笔记
- C++Primer学习笔记
- C++Primer学习笔记
- C++Primer学习笔记
- c++primer学习笔记
- C++Primer Plus学习笔记
- linux & C++Primer 学习笔记
- c ++Primer学习笔记之一
- 学习《c++primer》笔记一
- 学习《c++primer》笔记二
- 将Cent0S 7的网卡名称eno16777736改为eth0
- POJ 3581 Sequence(后缀数组)
- 如何使用Eclipse上传一个Java web项目到Git@OSC上
- 第十/十一周训练1-5
- MongoDB数据库设计中6条重要的经验法则,part 3
- C++ Primer 学习笔记
- CSS设置行内元素和块级元素的水平居中、垂直居中
- 第十/十一周训练1-6
- Volley使用时出现InterruptedIOException,NoConnectionError这样的问题
- 第十/十一周训练1-7
- HashMap how to work
- UML类图
- 前端开发招聘中如何考评一名前端工程师?
- 判断一个年份是否是闰年的判断方法