随笔分类 -  c\c++

摘要:相同点: 都是地址的概念:指针指向一块内存,他的内容是所指内存的地址,引用是某块内存的别名 不同点: 指针是一个实体,而引用仅仅是一个别名 在使用时候引用无需解引用,而指针需要解引用(*) 指针只能在定义时别初始化一次,之后不可在变,指针一般可变(除非常量指针) 引用不能为空而指针可以为空 “siz 阅读全文
posted @ 2020-06-24 10:28 每天都要吃早饭 阅读(316) 评论(0) 推荐(0)
摘要:结构体变量的sizeof(牵扯到字节对齐机制) 结构体变量的首地址能够被其最大宽度基本类型成员的大小所整除。 结构体每个成员相对于结构体首地址偏移量都是成员大小的整数倍,如果有需要,编译器会在成员之间加上填充字节。 结构体的总大小为结构体最宽基本类型成员的整数倍。 eg; 1 /* 2 1.结构体的 阅读全文
posted @ 2020-06-20 15:39 每天都要吃早饭 阅读(439) 评论(0) 推荐(0)
摘要:存储形式:数组是一块连续的空间,声明是就要确定长度。链表是一块可不连续的动态空间,长度可变,每个节点都有指向下一个节点的指针。 数据查找:数组的线性查找速度块,查找操作直接使用偏移地址。链表需要按顺序检索节点,效率低。 数据插入或删除:链表可以快速插入和删除节点,而数组则可能需要大量的数据移动。 越 阅读全文
posted @ 2020-06-18 21:22 每天都要吃早饭 阅读(518) 评论(0) 推荐(0)
摘要:通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针,这种数组称为虚函数表。简单的说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。 例如:基类对象包含一个指针,该指针 阅读全文
posted @ 2020-06-18 21:16 每天都要吃早饭 阅读(323) 评论(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 每天都要吃早饭 阅读(303) 评论(0) 推荐(0)
摘要:一、基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。 class A{ public: void test(int i); void test(double i);//overload vo 阅读全文
posted @ 2020-06-18 16:30 每天都要吃早饭 阅读(347) 评论(0) 推荐(0)
摘要:我们说基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。在设计派生类时,对继承过来的成员变量的初始化工作也要由 阅读全文
posted @ 2020-06-18 14:30 每天都要吃早饭 阅读(420) 评论(0) 推荐(0)
摘要:拷贝构造函数生成新的类对象,而赋值运算符是给已有的对象重新赋值。 由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新对象相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中已有内存分配要先把内存释放掉。 *注意:当类中有指针类型的成员变量时,一定要重 阅读全文
posted @ 2020-06-18 10:15 每天都要吃早饭 阅读(315) 评论(0) 推荐(0)
摘要:缺省构造函数 缺省拷贝构造函数 缺省析构函数 缺省赋值运算符 缺省取地址运算符 缺省取地址运算符const *注:只有当实际使用这些函数的时候,编译器才会去定义它们。 摘自:https://blog.csdn.net/BostonRayAlen/article/details/93041395 阅读全文
posted @ 2020-06-18 09:58 每天都要吃早饭 阅读(951) 评论(0) 推荐(0)
摘要:从静态存储区域分配 内存在程序编译的时候就已经分配好,这块区域在程序的整个运行期间都存在。例如全局变量,static变量等。 在栈上分配 在执行函数时,函数内部定义的局部变量的存储单元都在栈上创建。当函数执行结束时,这些存储单元自动被释放。 从堆上分配 动态分配内存。new/delete 或者mal 阅读全文
posted @ 2020-06-18 09:37 每天都要吃早饭 阅读(296) 评论(0) 推荐(0)
摘要:在C中static用来修饰局部静态变量和外部静态变量、函数。在C++中除了上述功能外,还用来定义类的成员变量和函数。即静态成员数据和静态成员函数。 注意:编程时static的记忆性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而C++的静态成员则可以在多个对象实例间进行通信,传递信息 阅读全文
posted @ 2020-06-17 21:17 每天都要吃早饭 阅读(557) 评论(0) 推荐(0)
摘要:sizeof是一个操作符,strlen是库函数; sizeof的参数可以是数据的类型,也可以是变量,二strlen只能是以‘\0’的字符串做参数。 编译器再编译时就计算出了sizeof的结果,而strlen函数必须再运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小(字节数),而str 阅读全文
posted @ 2020-06-17 20:01 每天都要吃早饭 阅读(218) 评论(0) 推荐(0)
摘要:如果某个类实现了多个这个类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干。但是有时人们希望有某一个或几个数据成员为所有对象所共有。这样可以实现数据共享。在前面介绍过全局变量能够实现数据共享。如果在一个程序文件中有多个函数,在每一个函数中都可以改变全局变量的值,全局 阅读全文
posted @ 2020-06-17 19:26 每天都要吃早饭 阅读(808) 评论(0) 推荐(0)
摘要:作用:在该成员函数内无法修改数据成员,且不能调用非const成员函数。 const 成员函数的基本定义格式 类内定义 类型 函数名(参数列表)const { 函数体 } 类内声明,类外定义 类内声明:返回类型 函数名(参数列表)const 返回类型 类名::函数名(参数列表)const { 函数体 阅读全文
posted @ 2020-06-17 17:00 每天都要吃早饭 阅读(6706) 评论(0) 推荐(1)
摘要:1 #include<iostream> 2 //#include<ostream> 3 //class ostream; 4 class string 5 { 6 public: 7 //constructor 8 string(const char* str=nullptr); 9 //copy 阅读全文
posted @ 2020-06-16 14:59 每天都要吃早饭 阅读(339) 评论(0) 推荐(0)
摘要:使用new/delete申请释放内存 类型名* 指针=new 类型名 int* p=new int; delete p; 类型名* 指针=new 类型名[数组长度] int* ptr=new int[5]; delete []p; 使用malloc/free申请释放内存 类型名* 指针=(类型名*) 阅读全文
posted @ 2020-06-16 10:58 每天都要吃早饭 阅读(170) 评论(0) 推荐(0)
摘要:#:链接字符串,字符串常量需要加“”号;#的右边不能加字符串常量。 ##:粘合参数,不仅仅是字符串,可以是其他类型。 #include<iostream> #define STR(s) "hello"#s#s #define CONS(a,b)(int)(a##e##b) int main() { 阅读全文
posted @ 2020-06-16 10:05 每天都要吃早饭 阅读(275) 评论(0) 推荐(0)
摘要:刚学完C++,想拿一个C\C++的项目巩固基础,听说由cJSON这个JSON解析器的项目,完全由c语言编写,且代码量也不多 适合新手就拿来试试了,在使用VS2019,VS2017,VS2015对cJSON.c,cJSON.h,test.c三个文件进行编译时,总是不能通过: 多方查找,原因是Visua 阅读全文
posted @ 2020-06-10 11:14 每天都要吃早饭 阅读(2034) 评论(0) 推荐(0)
摘要:今天在写一个程序是 突然遇到这个一个奇怪的问题,字符型指针指向string类型的字符串 如下: string str="abcdcccd"; char* t1=str; 竟然报错!我学了很久 我一直以为这个能通过! 找了一会 解决方法如下: 使用tring对象的c_str()函数。 还是不行,报错如 阅读全文
posted @ 2020-06-10 10:44 每天都要吃早饭 阅读(3018) 评论(0) 推荐(0)
摘要:依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定)。 抽象不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。 开放封闭原则(OCP) 对扩展开放,对更改封闭 类模块应该是可扩展的,但是不可修改。 单一职责原则(SRP) 一个类应该仅有一个引 阅读全文
posted @ 2020-06-09 15:05 每天都要吃早饭 阅读(117) 评论(0) 推荐(0)