指针常量和常量指针
常量指针指向的内容不可以修改,指针的指向可以修改;指针常量的指向不可以修改,指针指向的值可以修改。
void const_pointer() { int a = 10; int b = 20; const int* p = &a; p = &b; cout << "p is " << *p << endl; int* const p2 = &a; *p2 = 20; cout << "p2 is " << *p2 << endl;}
数组
二维数组定义和分配内存
c++中有三种方法来动态申请多维数组
1) c中的malloc/free2) c++中的new/delete3) STL容器中的vector
第一种: malloc/free
void dynamicCreate1Array(int len, int m, int n) { int *p; p = (int*)malloc(sizeof(int)*len); cout << "malloc/free" << endl; PrintArray(p, len); free(p); int **p2; p2 = (int**)malloc(sizeof(int*)*m); for (int i = 0; i < m; ++i) { p2[i] = (int*)malloc(sizeof(int*)*n); } PrintArray(p2, m, n); for (int i = 0; i < m; ++i) free(*(p2+i));}
第二种:new/delete
void dynamicCreate2Array(int len, int m, int n) { int *p = new int[len]; int *p1 = new int[len](); cout << "new/delete" << endl; PrintArray(p, len); PrintArray(p1, len); delete[] p; delete[] p1; int **p2 = new int*[m]; for (int i = 0; i < m; ++i) p2[i] = new int[n](); PrintArray(p2, m, n); for (int i = 0; i < m; ++i) delete[] p2[i]; delete[] p2;}
第三种:STL容器中的vector
void dynamicCreate3Array(int len, int m, int n) { vector<int> p(len); cout << "vector" << endl; cout << "输出一维数组" << endl; for (int i = 0; i < p.size(); ++i) cout << p[i] << ' '; cout << endl; vector<vector<int> > p2(m, vector<int>(n)); cout << "输出二维数组" << endl; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) cout << p2[i][j] << ' '; cout << endl; }}
引用
引用的本质是指针常量
类
类的权限
类的权限有3种
public 类内类外都可以访问protected 类内可以访问,类外不可以访问,可以继承private 类内可以访问,类外不可以访问,不可以继承
struct和class的区别
struct默认权限为公共,class默认权限为私有。
构造函数和析构函数
构造函数
函数名与类名相同构造函数可以有参数,可以发生重载创建对象时,构造函数会自动调用,而且只调用一次 析构函数
没有返回值,不写void函数名与类名相同,在名称前加~析构函数不可以有参数,不可以发生重载对象在销毁前会自动调用析构函数,而且只会调用一次
深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作(系统默认拷贝构造方式为浅拷贝)深拷贝:在堆区重新申请空间,进行拷贝操作
文件读写
c++文件操作有三类
ofstream:写操作ifstream:读操作fstream: 读写操作
读/写文件的步骤
打开头文件->创建流对象->打开文件->写/读数据->关闭文件
打开文件的方式
模式含义
in打开文件用于读取out打开文件用于写入ate打开文件并移到末尾app打开文件用于追加trunc若文件已存在,打开文件并截 取流(清除原有数据)binary以二进制流方式打开文件
读取文本文件的四种方法
void test02() { ifstream ifs; ifs.open("test.txt", ios::in); if (!ifs.is_open()) { cout << "文件打开失败" << endl; return; } char buf[1024] = {0}; while (ifs >> buf) { cout << buf << endl; } char buf[1024] = {0}; while (ifs.getline(buf, sizeof(buf))) { cout << buf << endl; } string buf; while (getline(ifs, buf)) { cout << buf << endl; } char c; while ((c = ifs.get()) != EOF) { cout << c; } ifs.close();}
二进制文件的读写
class Person { public: char m_name[64]; int m_age;};void test03() { ofstream ofs; ofs.open("person.txt", ios::out | ios::binary); Person p = {"张三", 18}; ofs.write((const char *)&p, sizeof(Person)); ofs.close();}void test04() { ifstream ifs; ifs.open("person.txt", ios::in | ios::binary); if (!ifs.is_open()) { cout << "文件打开失败" << endl; return; } Person p; ifs.read((char *)&p, sizeof(Person)); cout << "姓名:" << p.m_name << endl; cout << "年龄:" << p.m_age << endl; ifs.close();}