摘要: int a[3] = {1, 2, 3}; a: 数组名,数组中第一个元素的地址,相当于 &a[0] &a:整个数组的地址,在数值上等于 a a+1:数组中第二个元素的地址,相当于 &a[1] &a+1:整个数组结束以后后面一个位置的地址 即:a = &a, 但 a+1 ≠ &a+1 a[0] a[ 阅读全文
posted @ 2023-06-12 22:43 wkxnk 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 32位编译器: char short int long long long float double 指针 1 2 4 4 8 4 8 4 64位编译器: char short int long long long float double 指针 1 2 4 8 8 4 8 8 阅读全文
posted @ 2023-06-12 00:01 wkxnk 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 虚函数: 函数前有virtual关键字,子类继承后用于动态多态 纯虚函数: 函数前有virtual关键字,且函数列表后必须有 “=0”,纯虚函数没有函数体,只能在子类中重载后实现函数体并调用 阅读全文
posted @ 2023-06-10 00:26 wkxnk 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 如果父类与子类中拥有同名的函数: 1. 如果父类函数前没有virtual,且父子同名函数的参数列表不同(参数个数、类型和顺序至少有一个不同), 则构成重载,用父类指针调用该函数名,调用的是子类函数,父类函数被覆盖 / 隐藏 / 不可见 (注:若两个函数参数列表相同,只有返回值类型不同,不构成重载) 阅读全文
posted @ 2023-06-10 00:22 wkxnk 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 1. 子类实例化时一定会调用父类的构造函数,然后再调用自己的构造函数(析构时顺序相反) (因为子类继承了部分父类的成员变量,需要调用父类的构造函数来初始化) 2. 若有自定义的构造函数,则系统调用自定义构造函数;如果没有,则系统会自动生成一个默认的构造函数并调用它 (系统自动调用属于“隐式调用”) 阅读全文
posted @ 2023-06-10 00:05 wkxnk 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 类成员访问权限有3种: public, protected, private 三者区别: 权限级别 类内函数 派生类函数 对象 public √ √ √ protected √ √ × private √ × × (注:“√” 表示可访问,“×” 表示不可访问) 派生类继承基类的继承方式也有三种: 阅读全文
posted @ 2023-05-31 00:01 wkxnk 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 对于纯C语言: 没有class,struct仅作为一种包含多种基本类型 (int, char, double) 的组合体,没有类的概念,没有继承、多态等功能 对于C++: C++中的struct是对C的兼容与扩充,功能和class区别不大,除了成员变量还可以包含成员函数,有继承、多态等功能,唯一的区 阅读全文
posted @ 2023-05-27 16:51 wkxnk 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 1. 分号问题: a. 语句开头带“#”号的(#include、#define)末尾不加分号 #define PI 3.14 b. 函数参数列表后面(小括号后面)、函数体后面(大括号后面)不加分号 void fun(int param) { return 0; } c. 对于判断语句、循环语句,条件 阅读全文
posted @ 2023-05-15 22:24 wkxnk 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 封装、继承、多态、抽象 其中抽象和封装是对类的描述,继承是类的功能,多态是基于继承功能之上的功能 阅读全文
posted @ 2023-05-13 17:31 wkxnk 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 定义变量 int a = 1; const int b = 2; 1. 将 普通变量地址 赋给 普通指针: int * p1 = a; // 正确 2. 将 const变量地址 赋给 普通指针: int * p2 = b; // 错误 // p2是普通指针,意味着可以通过p2修改b的值,而b为con 阅读全文
posted @ 2023-05-10 13:29 wkxnk 阅读(49) 评论(0) 推荐(0) 编辑