常用C++新建工程类型:
ATL项目:COM相关,主要用于写插件 生成DLL文件
CLR项目:类似java虚拟机
MFC:微软提供的一套基础库 可以生成exe,dll
WIN32 :exe,dll,控制台类型等等 (类似windows cmd)
函数:
形参和实参:函数声明定义的时候,没有申请空间的参数模子
int functionname (int x, int y) { 声明部分,执行语句 } x,y 形式参数列表
递归调用 案例:getage
全局变量: 定义在全局的位置中,值在main和其他函数中都可以调用,可以被修改。
局部变量:有作用域 定义在函数(包括Main)内的 就是局部变量;不同定义域内的变量名可以重复
当有多个cpp文件,在其他cpp文件中需要使用全局变量时,需要声明 extern type globalvar(extern 类型 全局变量名称)
多文件共同访问一个全局变量: 在一个cpp文件中定义全局变量后,在header文件中声明(注意不要直接赋值定义),在需要使用的cpp文件中包含header
static 静态类型 只初始化一次 之后就直接用它上一次的值
数组定义: 类型 数组名【常量表达式】 int apple[10] = {0} 代表有10个元素 0~9 定义时,无初值就先赋0.注意数组的越界问题 如果后来要扩展,用new
字符‘a’ 'b' 字符串“asf” 字符串的结尾有/0(结束符)
地址和指针:定义什么类型的指针就只能指向什么类型的变量。指针本身也是变量,它的内容是某个变量的地址。&取地址符 指针变量也有地址 &p 为指针变量的地址
p 的值是某个变量的地址 *p 的内容是某个变量的值
数组和指针。数组名即数组首地址,定义一个指针指向数组首地址,*arrayp = array
面向过程:函数是构成程序的基本单位
面向对象:对象有属性和行为构成 将程序分成不同的彼此有联系的多个对象。数据就是对象的属性,函数即是功能/行为。
对象封装:整理将一个对象的相关属性和行为封装在对象之中,形成一个基本单位
抽象,抽象就是归类,类就是对象的抽象。类的具体表现形式。
结构体变量给函数传递参数的时候也是按照值传递的方式。 struct Stufent{ string name; int num;}
函数值传递:void swap(a,b){...} swap(x,y)x=1,y=2
调用swap时,为a,b分配空间,再将x和y的值复制给a,b ,进行交换。但此时对真正需要的x,y并无任何操作。
所以要用指针传递,传递地址 void swap(int *a,*b) void(Student* num)
枚举类型:一个变量只能有几种可能的值
枚举类型的声明: enum ESex{ hello,hi}; 逗号间隔;枚举元素按常量处理,初始默认赋值为0,1,2... 声明的时候可以赋值,之后不能对枚举元素进行赋值。可以用于等号右边的计算;用于switch case; 可以在结构体里面定义一个成员变量为枚举类型
typedef unsigned int uint;只是声明一个新的类型名字 来代替 已有的类型
引用,只有声明,没有定义。先有一个变量,再对该变量建立一个引用。
a = 5; int &b =a; 跟在类型后面的& 即为引用。 b是a的一个引用。也可以继续,建立引用的引用 int &c=b; int*p= &b 建立引用的指针。在声明时,为b开辟了一个指针型的存储单元,内容是a的地址
3.13
new 和 delete 动态分配内存:new 和 malloc 相似,不主动delete ,会一直存在。某些变量受到函数作用域的限制,使用new 分配则内存一直存在。
//C语言使用malloc申请一个int类型变量的内存
int* p = (int*)malloc(sizeof(int));
*p=5;free(p);
C++中使用new和delete new操作符返回的是一个指针。
int* p = new int(4); new申请完后还会调用其构造函数。
delete(p);
//数组
int *p111 = new int[10];
p111[0] = 2;
delete[] p111;
使用技巧
1. 保留关键字,定义变量时避免使用
2. 工程目录下 debug/release文件可以删除 *.pch