摘要: 存储形式:数组是一块连续的空间,声明是就要确定长度。链表是一块可不连续的动态空间,长度可变,每个节点都有指向下一个节点的指针。 数据查找:数组的线性查找速度块,查找操作直接使用偏移地址。链表需要按顺序检索节点,效率低。 数据插入或删除:链表可以快速插入和删除节点,而数组则可能需要大量的数据移动。 越 阅读全文
posted @ 2020-06-18 21:22 每天都要吃早饭 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针,这种数组称为虚函数表。简单的说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。 例如:基类对象包含一个指针,该指针 阅读全文
posted @ 2020-06-18 21:16 每天都要吃早饭 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 一、简单的函数指针的应用 形式1:返回类型(*指针变量)(参数列表); 1 char (*pFun)(int); 2 char glFun(int a){ return;} 3 void main() 4 { 5 pFun = glFun; 6 (*pFun)(2); 7 } 第一行定义了一个指针变 阅读全文
posted @ 2020-06-18 19:54 每天都要吃早饭 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 一、基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。 class A{ public: void test(int i); void test(double i);//overload vo 阅读全文
posted @ 2020-06-18 16:30 每天都要吃早饭 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 我们说基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。在设计派生类时,对继承过来的成员变量的初始化工作也要由 阅读全文
posted @ 2020-06-18 14:30 每天都要吃早饭 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 拷贝构造函数生成新的类对象,而赋值运算符是给已有的对象重新赋值。 由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新对象相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中已有内存分配要先把内存释放掉。 *注意:当类中有指针类型的成员变量时,一定要重 阅读全文
posted @ 2020-06-18 10:15 每天都要吃早饭 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 缺省构造函数 缺省拷贝构造函数 缺省析构函数 缺省赋值运算符 缺省取地址运算符 缺省取地址运算符const *注:只有当实际使用这些函数的时候,编译器才会去定义它们。 摘自:https://blog.csdn.net/BostonRayAlen/article/details/93041395 阅读全文
posted @ 2020-06-18 09:58 每天都要吃早饭 阅读(937) 评论(0) 推荐(0) 编辑
摘要: 从静态存储区域分配 内存在程序编译的时候就已经分配好,这块区域在程序的整个运行期间都存在。例如全局变量,static变量等。 在栈上分配 在执行函数时,函数内部定义的局部变量的存储单元都在栈上创建。当函数执行结束时,这些存储单元自动被释放。 从堆上分配 动态分配内存。new/delete 或者mal 阅读全文
posted @ 2020-06-18 09:37 每天都要吃早饭 阅读(282) 评论(0) 推荐(0) 编辑