---- 当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
int - 0 char - '\0' float - 0 double - 0 pointer - 'NULL'
---- 常量定义为大写字母形式
---- 使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。
---- extern 是用来在另一个文件中声明一个全局变量或函数。常用于当有两个或多个文件共享相同的全局变量或函数的时候。
---- 函数的参数--形参:传值调用、(指针调用、引用调用:修改参数会影响原来的参数)
---- 对于有默认参数的函数,调用时如果未传递参数的值则会使用默认值,如果指定了值则会忽略默认值,使用传递的值。
---- 数组:存储一个固定大小的相同类型元素的顺序集合,连续的内存。
申明数组:type arrayName [ arraySize ];
初始化数组:
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}; /* balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址 */ double *p; double balance[10]; p = balance; // *(balance + 4) 是一种访问 balance[4] 数据的合法方式
二维数组:
int a[3][4] = { {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ }; // 内部嵌套的括号是可选的,下面的初始化与上面是等同的: int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
数组作为函数参数
double getAverage(int arr[], int size) { int i, sum = 0; double avg; for (i = 0; i < size; ++i) { sum += arr[i]; } avg = double(sum) / size; return avg; } ...... // 调用 int balance[5] = {1000, 2, 3, 17, 50}; double avg; // 传递一个指向数组的指针作为参数 avg = getAverage( balance, 5 ) ; 数组作为函数的返回值 // 要生成和返回随机数的函数 int * getRandom( ) { static int r[10]; // 设置种子 srand( (unsigned)time( NULL ) ); for (int i = 0; i < 10; ++i) { r[i] = rand(); cout << r[i] << endl; } return r; } ... int *p; p=getRandom(); ---- 字符串 C风格字符串:char char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; //等同于 char greeing[] = "Hello";
C++中的string类:string
---- 指针:动态分配内存。每一个变量的地址可以通过&运算符获得。
---- 引用:
void swap(int& x, int& y) { int temp; temp = x; /* 保存地址 x 的值 */ x = y; /* 把 y 赋值给 x */ y = temp; /* 把 x 赋值给 y */ return; } ...... int a; int b; swap(a,b);
----数据结构用户自定义的可用的数据类型,它允许存储不同类型的数据项,用.访问成员。
// 声明一个结构体类型 Books struct Books { char title[50]; char author[50]; char subject[100]; int book_id; };
cout << "书标题 : " << book.title <<endl;
指向结构的指针:
struct Books *struct_pointer; // 在指针变量中存储结构变量的地址 struct_pointer = &Book1; // 使用->访问成员 struct_pointer->title;
// 该函数以结构指针作为参数 void printBook( struct Books *book ) { cout << "书标题 : " << book->title <<endl; cout << "书作者 : " << book->author <<endl; cout << "书类目 : " << book->subject <<endl; cout << "书 ID : " << book->book_id <<endl; } ...... Books Book1; strcpy(Book1.title,"C++教程"); printBook(&Book1);
----- 类的成员函数:把那些定义和原型卸载类内部的函数,像类中其他变量一样,是类的成员,可以操作类的任意对象,可以访问类中的所有成员。成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。
#include <iostream> using namespace std; class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 // 成员函数声明 double getVolume(void); void setLength( double len ); void setBreadth( double bre ); void setHeight( double hei ); }; // 成员函数定义 double Box::getVolume(void) { return length * breadth * height; } void Box::setLength( double len ) { length = len; } void Box::setBreadth( double bre ) { breadth = bre; } void Box::setHeight( double hei ) { height = hei; } // 程序的主函数 int main( ) { Box Box1; // 声明 Box1,类型为 Box double volume = 0.0; // 用于存储体积 // box 1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // box 1 的体积 volume = Box1.getVolume(); cout << "Box1 的体积:" << volume <<endl; }
类的继承:https://www.runoob.com/cplusplus/cpp-inheritance.html
---- C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 virtual修饰符则强调父类的成员函数可以在子类中被重写.
----- 数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。所以在设计组件时,必须保持接口独立于实现。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。
---- 在函数内部申明的所有变量都将占用栈内存,堆:在程序中未使用的内存,在程序运行时可用于动态分配内存。
数组的动态分配内存
#include <iostream> using namespace std; int main() { int i,j,k; // p[2][3][4] int ***p; p = new int **[2]; for(i=0; i<2; i++) { p[i]=new int *[3]; for(j=0; j<3; j++) p[i][j]=new int[4]; } //输出 p[i][j][k] 三维数据 for(i=0; i<2; i++) { for(j=0; j<3; j++) { for(k=0;k<4;k++) { p[i][j][k]=i+j+k; cout<<p[i][j][k]<<" "; } cout<<endl; } cout<<endl; } // 释放内存 for(i=0; i<2; i++) { for(j=0; j<3; j++) { delete [] p[i][j]; } } for(i=0; i<2; i++) { delete [] p[i]; } delete [] p; return 0; }
--------------------------待续----------------------