对象是类的实例,一个类包含多个方法
即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的
$ g++ hello.cpp
$ ./a.out
Hello World*/
宽字符型 typedef short int wchar_t; 4字节,同int;
long int 8 个字节,int 都是 4 个字节
typedef 为已有的类型取新名字
一个变量只有几种可能的值,可以定义为枚举(enumeration)类型
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
enum color { red, green, blue } c;
c = blue;
enum color { red, green=5, blue }; blue 的值为 6;red的值为0,默认为0 1 2 …
#define WIDTH 5 ;#define 名字 值
const int a=0; 和 define 关键字一样。const 类型的对象在程序执行期间不能被修改改变。
volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量
C++ 程序中可用的存储类:auto register static extern mutable thread_local (C++11)
auto 自动指定变量的类型;
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量
变量的最大尺寸等于寄存器的大小(通常是一个词)不能对它应用一元的 '&' 运算符(因为它没有内存位置)。
static 存储类指示编译器在程序的生命周期内保持局部变量的存在。
因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
当您使用 'extern' 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
?= 运算符;Exp1 ? Exp2 : Exp3;
return_type function_name( parameter list )
{
body of the function
}
如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。
形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
当调用函数时,有三种向函数传递参数的方式:
调用类型 描述
传值调用 该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
指针调用 该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
引用调用 该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
参数的默认值:在函数定义形式参数时,比如 int max(a, b=10); 若调用时 max(a)则 b=10;max(2,3)则 b=3。
对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。
Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,
比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:
[capture](parameters)->return-type{body}
<cmath> : sin cos tan log pow hypot(a,b)平方和的平方根; sqrt
abs 绝对值;fabs 浮点数绝对值;floor 小于等于其的最大整数。
数组名是数组第一个元素的地址。
字符串实际上是使用 null 字符 \0 终止的一维字符数组。
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
=== char site[] = "RUNOOB";
int *ip; 声明指针变量。
ip = &var; 在指针中存储变量的地址。
a = *ip; 取变量的值
int *ptr = NULL; ptr值为0;
对指针进行四种算术运算:++、--、+、-
C++ 允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。
传递一个无符号的 long 型指针给函数,并在函数内改变这个值
unsigned long *p;
int * myFunction(); 从函数返回指针。
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
int i = 17;
为 i 声明引用变量,如下所示:
int& r = i;
double& s = d;
在这些声明中,& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。
把引用作为参数 C++ 支持把引用作为参数传给函数,这比传一般的参数更安全。
把引用作为返回值 可以从 C++ 函数中返回引用,就像返回其他数据类型一样。
结构体定义 和 C 一样。
为了访问结构的成员,我们使用成员访问运算符(.)
可以把结构体作为函数的参数:
void printBook( struct Books book );
可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;
在上述定义的指针变量中存储结构变量的地址。
为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:
struct_pointer = &Book1;
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:
struct_pointer->title;
typedef struct books{}book;
typedef long int *pint32;
pint32 x, y, z;
类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。
私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。
成员函数:
函数返回值 类名::成员函数名(void);
double Box::get(void)
类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private。
1.类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
2.类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。