学习谭浩强编著的《C++程序设计》过程中的一些笔记,mark一下,好记性不如烂笔头
1、CPP内置函数inline
在编译时将所有调用函数的代码嵌入主函数中,
可以在函数声明处最左端添加关键词 inline,也可以在函数处添加,也可以两处都添加
内置函数不能包括复杂的控制语句,如循环语句和switch语句
2、重载函数:一名多用
函数名相同,参数个数或者参数类型或者参数循序不同
3、函数模板(泛型)function template
template
T max(T a, T b, T c){
if(b>a) a = b;
if((c>a) a = c;
return a;
}
4、变量
注意:在调用函数之前,需要对每一个被调用的函数作声明(除非定义函数在前面,调用函数在后面);
1)、关键词register 声明寄存器变量;
2)、关键词extern 声明外部变量,
在一个文件内声明的全局变量,其有效作用范围只限于定义处到文件终了,
如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键词extern对该变量进行外部变量声明(即对全局变量的提前引用声明)
3)、用static声明静态外部变量,仅限于本文件引用,而不能被其他文件引用
5、函数
1)、内部函数:仅限于本文件中其他函数调用;
例如:static int fun(int a, int b)
2)、外部函数:在定义函数时,在函数最左端冠以关键字extern,则表示此函数时外部函数,可被其他文件调用;
如果定义函数时,默认省略关键字extern,默认为外部函数
例如:extern int fun(int a, int b)
6、预处理指令
预处理功能3中:宏定义、文件包含、条件编译
1)、宏定义:可以用 #define命令将一个指定的标识符(宏)来代表一个字符串;
#define 标识符 字符串
#define PI 3.1415926
2)、文件包含:指一个源文件可以将另一个源文件的全部内容包含进来,即将另外一个的源文件包含到本文件之中;
#include “file.cpp”
#include
7、条件编译
1)、当指定的标识符已被#define命令定义过,则在程序编译阶段只编译程序1,否则编译程序段2,#else部分可以没有。
#endif是用来限制#ifdef命令的范围。
#ifdef 标识符
程序段1
#else
程序段2
#enddef
2)、当指定的表达式为真(非0),就编译程序段1,否则编译程序段2
#if 表达式
程序段1
#else
程序段2
#endif
8、数组
1)、用数组元素作函数实参
2)、用数组名做函数参数
3)、用多维数组名作函数参数
字符数组定义和初始化
字符串和字符串结束标志’\0’
9、字符串连接函数strcat
例如:strcat(chart[],const chart[]);
10、字符串复制函数strcpy(chart[],const chart[])
//第一个参数必须是数组名,第二个参数可以是数组名也可以是字符串常量
strcpy(str1,str2);或者strcpy(str1,“China”);
strcyp(str1,str2,2);//将字符数组str2中的前两个字符复制到str1中
11、字符串比较函数strcmp(const chart[], const chart[])
指将两个字符串自左至右逐个字符进行比较大小,直到遇到不同的字符或者’\0’为止。
如果全部相同,则认为字符相等;若出现不同的字符,则以第一个不相同的字符的比较结果为准;
比较结果:
1)两个字符相同,结果为0;
2)str1大于str2,结果为正整数;
3)str1小于str2,结果为负整数;
12、字符串长度函数strlen(const chart[])
测试字符串长度的函数,函数的值为字符串中的实际长度,不包括’\0’
chart str[10] = “China”;
cout << strlen(str);//输出结果为5
字符数组应用举例
13、指针
& 取地址运算符
i_pointer=&i; //将i的地址存放到i_pointer中
一个变量的地址称为该变量的指针
指针变量的值是地址
指针定义:基类型+*指针变量名;
int * ipointer;
14、指针函数
调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值
15、引用&
作用是为一个变量取一个别名;
声明引用时 &代表引用声明符
例如:
int a;
int &b = a;//声明b是a的引用
区别取地址符和变量引用:
当&a前面有类型符时(int &a),它必然是对引用的声明;
如果前面无类型符(cout << &a),则是取变量的地址
16、结构体
例如:
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char add[30];
}student1,student2;//声明结构体时并定义两个变量
17、动态分配和撤销内存的运算符new和delete
例如:
int * p = new int(100);//开辟一个存放整型的存储空间,并指定该整型的初值为100,将返回该存储空间的地址赋给指针变量p
delete p;
chart * pt = new char[30];
delete [] pt;//在指针变量前面加一对方括号,代表是对数组空间的操作
18、共用体(联合体)
这种使几个不同类型的变量共占同一段内存的结构,称为共用体
声明共用体形式如下:
union 共用体名称
{
成员列表
};
共用体与结构体的比较
结构体:结构体所占内存长度是各成员占内存之和
共用体:共用体所占内存长度是等于最长的成员的长度
19、枚举
enum weekay{sun,mon,tue,wed,thu,fir,sat};
20、使用typedef声明类型
typedef int INTEGER;//使用INTEGRE代表int类型
typedef float REAL; //使用REAL代表float类型
21、inline成员函数
C++要求内置函数要用inline关键字声明,但对类内部定义的成员函数可以省略inline,
因为这些成员函数已经被隐含的指定为内置函数
22、析构函数
是一个特殊的成员函数,它的作用与构造函数相反,它的名字前面带一个“~”符号。
当对象的声明周期结束时,自动执行析构函数。
23、多态
向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为。
24、纯虚函数
virtual void test() const =0;
凡是包含纯序函数的类都是抽象类