C 与 C++
文章平均质量分 68
主要讲C语言的内容。
天糊土
对嵌入式非常感兴趣。
展开
-
C++学习——C++运算符重载(含义、格式、示例、遵循的规则)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-11-22 21:32:56 · 424 阅读 · 0 评论 -
C++学习——引用详解
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-10-15 20:55:48 · 2790 阅读 · 0 评论 -
C++学习——string 详解(即C++字符串详解)
C++增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string是类,而不是基本数据类型。虽然平时一般叫string变量,但切确来说应该叫string对象。使用 string 类需要包含头文件<string>string s1;return 0;(1)变量s1只是定义而没有初始化,此时编译器会将空字符串赋给 s1,即""。(2)变量s2在定义的同时被初始化为。从中可以看出,string 变量可以直接通过赋值操作符进行赋值。原创 2023-10-14 23:30:38 · 2109 阅读 · 0 评论 -
C++学习——类其实也是一种作用域
在类的作用域之外,普通的成员只能通过对象(可以是对象本身,也可以是对象指针或对象引用)来访问,静态成员既可以通过对象访问,又可以通过类访问,而 typedef 定义的类型只能通过类来访问。另一方面,函数的返回值类型出现在函数名之前,当成员函数定义在类的外部时,返回值类型中使用的名字都位于类的作用域之外,此时必须指明该名字是哪个类的成员。我们在定义 show() 函数时用到了类 A 中定义的一种类型 PCHAR,因为前面已经指明了当前正位于 A 类的作用域中,所以不用再使用。原创 2023-10-14 17:48:31 · 213 阅读 · 0 评论 -
C++学习——友元函数和友元类(friend关键字)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-10-14 17:37:54 · 145 阅读 · 0 评论 -
C++学习——如何实现C++和C的混合编程(extern “C“详解)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-10-14 16:48:53 · 896 阅读 · 0 评论 -
C++学习——C++中const的新花样
C++ 中的 const 变量虽然也会占用内存,也能使用获取得它的地址,但是在使用时却更像编译时期的#define;#define也是值替换,可见范围也仅限于当前文件。很多C++教程在对比 const 和 #define 的优缺点时提到,#define 定义的常量仅仅是字符串的替换,不会进行类型检查,而 const 定义的常量是有类型的,编译器会进行类型检查,相对来说比 #define 更安全,所以鼓励大家使用 const 代替 #define。原创 2023-10-14 01:23:51 · 209 阅读 · 0 评论 -
C++学习——对象数组、成员对象与封闭类
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-10-13 22:57:20 · 553 阅读 · 0 评论 -
C++学习——构造函数、析构函数
C++中有一种特殊的成员函数,它的名字和类名相同,可以有形参,但没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。析构函数(Destructor)是一种特殊的成员函数,它的名字是在类名前面加一个符号,没有返回值,没有参数,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。原创 2023-10-13 20:49:43 · 949 阅读 · 0 评论 -
C++学习——静态成员变量、静态成员函数
(1)一个类中可以有一个或多个静态成员变量,所有的对象都共享这些静态成员变量。(2)static 成员变量和普通 static 变量一样,都在内存分区中的全局数据区分配内存,到程序结束时才释放。这就意味着,static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。(3)静态成员变量必须初始化,而且只能在类体外进行。初始化时可以赋初值,也可以不赋值。如果不赋值,那么会被默认初始化为 0。原创 2023-10-13 17:57:42 · 201 阅读 · 0 评论 -
C++学习——C++函数的编译、成员函数的调用、this指针详解
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。从的分析中可以看出,对象的内存中只保留了成员变量,除此之外没有任何其他信息,程序运行时不知道 stu 的类型为 Student,也不知道它还有四个成员函数 setname()、setage()、setscore()、show(),C++ 究竟是如何通过对象调用成员函数的呢?原创 2023-10-13 16:36:45 · 1106 阅读 · 0 评论 -
C++学习——对象的内存模型
Student 类包含三个成员变量,它们的类型分别是 char *、int、float,都占用 4 个字节的内存,加起来共占用 12 个字节的内存。从运行结果可以看出,在计算类这种类型的大小时,只计算成员变量的大小,并没有把成员函数也包含在内。也就是说,对象的大小只受成员变量的影响,和成员函数没有关系。但是不同对象的成员函数的代码是一样的,上面的内存模型保存了 10 份相同的代码片段,会浪费不少空间。编译器将成员变量和成员函数分开存储,即分别为每个对象的成员变量分配内存,但是所有对象都共享同一段函数代码。原创 2023-10-13 15:19:54 · 148 阅读 · 0 评论 -
C++学习——类成员的访问权限、类的封装
所谓类成员的访问权限,就是你能不能使用该类中的成员。C++通过 public(公有)、protected(受保护)、private(私有) 这三个成员访问限定符,来控制成员变量和成员函数的访问权限。在类的内部,无论成员被声明为 public、protected 还是 private,它们之间都是可以互相访问的,没有访问权限的限制。在类的外部,我们只能通过对象来访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。原创 2023-10-13 14:18:54 · 553 阅读 · 0 评论 -
C++学习——类的定义与对象的创建
与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。原创 2023-10-12 23:17:42 · 113 阅读 · 0 评论 -
C++学习——“面向对象编程”的涵义
在C语言中,我们会把重复使用或具有某项功能的代码封装成一个函数,将拥有相关功能的多个函数放在一个源文件,再提供一个对应的头文件,这就是一个模块。,C语言的晚辈们看到了C语言的不足,尝试加以改善,继承了结构体的思想,并进行了升级,让程序员在开发或扩展大中型项目时更加容易。不要小看类(Class)这一层封装,它有很多特性,极大地方便了中大型程序的开发,它让 C++ 成为面向对象的语言。类由一组相关联的函数、变量组成,你可以将一个类或多个类放在一个源文件,使用时引入对应的类就可以。原创 2023-10-12 21:52:12 · 193 阅读 · 0 评论 -
C++学习——内联函数详解
函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。一个 C/C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 main()。当 main() 调用完了所有的函数,它会返回一个值(例如return 0;原创 2023-10-12 01:30:54 · 361 阅读 · 0 评论 -
C++学习——new 和 delete 运算符简介
和 malloc() 一样,new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语言中 malloc()、free() 一起混用。在C++中,这两个函数仍然可以使用,但是C++新增了两个关键字:new 和 delete。在C++中,建议使用 new 和 delete 来管理内存,它们可以使用C++的一些新特性,最明显的是可以自动调用构造函数和析构函数。原创 2023-10-12 00:21:25 · 225 阅读 · 0 评论 -
C++学习——函数重载详解
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。原创 2023-10-11 22:14:57 · 767 阅读 · 1 评论 -
C++学习——命名空间详解(语法、头文件格式、std等内容)
这样的话,如果老师直接叫一声“小明”,则默认叫的是“西丽小明”(当然,老师也可以叫“西丽小明”,这样可以更明确,也建议这样叫);如果想要叫其他社区(非标准命名空间)的“小明”,必须加上他所在的社区(命名空间)作为前缀。但如果老师叫“平山小明”,或者“洪浪北小明”,或者“西丽小明”,因为前缀“平山”“洪浪北”“西丽”限定了一个空间范围,所以不会引起混乱,可以很明确找到这个小孩。平山社区有一个小孩的名字叫“小明”,洪浪北社区也有一个小孩的名字叫“小明”,西丽社区也有一个小孩的名字叫“小明”。原创 2023-10-04 10:09:20 · 163 阅读 · 0 评论 -
关于堆与栈的对比
以下内容源于网络资源的学习与整理,如有侵权请告知删除。原创 2023-04-01 15:00:26 · 1066 阅读 · 1 评论 -
c++远征之继承篇——继承方式
以下内容源于慕课网,系学习整理而成,如有侵权,请告知删除。1、公有继承2、保护继承3、私有继承原创 2017-06-16 10:07:17 · 351 阅读 · 0 评论 -
c++远征之模板篇——运算符重载
以下内容源于慕课网的学习整理,如有侵权,请告知删除。一、运算符重载的概念给原有的运算符赋予新的功能。比如下面的截图,本来加号+并不具备坐标的相加的功能,但是通过运算符重载可以实现该功能。二、运算符重载的本质本质是函数的重载;重载方式:友元函数重载、成员函数重载。即定义成一个类的友元函数,或者成员函数。三、运算符重载的关键字operator原创 2017-06-17 13:48:31 · 565 阅读 · 0 评论 -
c++远征之模板篇——友元函数、友元类
以下内容源于慕课网的学习整理,如有侵权,请告知删除。一、友元函数1、分类全局函数——》友元全局函数成员函数——》友元成员函数2、关键字friend友元全局函数如下,利用friend修饰的函数,其参数应该是本类的引用或者指针;这里的printXY函数写在类的外面,即全局函数。但是可以访问类的私有成员,因为用friend在原创 2017-06-16 21:35:56 · 459 阅读 · 0 评论 -
c++远征之多态篇——运行时类型识别(RTTI)
以下内容源于慕课网的学习整理,如有侵权,请告知删除。1、RTTI(Run-Time Type Information),运行时类型识别。涉及typeid、dynamic_cast这两个知识点。RTTI技术可以通过父类指针,识别其所指向对象的真实数据类型。2、如下面的例子首先是一些类的定义原创 2017-06-16 19:33:40 · 663 阅读 · 0 评论 -
string类的常用函数
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字转载 2017-06-22 14:36:13 · 490 阅读 · 0 评论 -
C++远航之封装篇——构造函数
1、为什么需要构造函数?见博客http://blog.csdn.net/zhhymh/article/details/62363172、c++中的内存分区(1)栈区int x=0;int *p=NULL;(2)堆区int *p = new int[20];(3)全局区存储全局变量和静态变量(4)常量区str原创 2017-04-19 22:58:51 · 673 阅读 · 0 评论 -
C++远征之封装篇——字符串类型
1、字符串操作函数2、字符串类型string(1)以前学的内容里,没有字符串类型,只有字符类型,对于字符串的操作,一般是用上面的函数来操作。现在有了字符串类型。(2)初始化(3)操作原创 2017-04-19 22:11:13 · 394 阅读 · 0 评论 -
C++离航篇——引用,const
以下内容源于http://www.imooc.com/learn/381的学习整理,如有侵权,请告知删除。一、引用(1)引用即定义别名对引用进行操作即对本身操作;int a=10; int &b=a; //定义了a的别名b;注意别名是不包括&的,也就是说&后面的变量才是别名;(2)定义引用时,必须同时初始化。(3)引用作函数参数(4)不同数据原创 2017-04-19 19:53:09 · 464 阅读 · 0 评论 -
c++远征之多态篇——虚函数及其实现原理
以下内容源于慕课网的学习整理,如有侵权,请告知删除。 1、多态的定义简单理解,就是对于同一条命令,不同对象会做出不同的操作。相同对象收到不同消息,或者不同对象收到相同消息时,产生不同的动作。2、多态的分类(1)静态多态(早绑定)如函数重载,在编译阶段,(根据传参情况)就已经知道要执行哪个函数。(2)动态多态(晚绑定)a、虚函数原创 2017-06-16 15:46:52 · 622 阅读 · 0 评论 -
c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序
一、继承的概念2、继承中,构造函数和析构函数的先后顺序原创 2017-06-16 09:55:25 · 421 阅读 · 0 评论 -
c++远征之模板篇——函数模板、类模板
以下内容源于慕课网的学习整理,如有侵权,请告知删除。函数模板(vs模板函数)1、为什么需要模板?函数体相同,只是类型不一样而已。那么能否把数据的类型当做参数传递呢?肯定是可以的,这是模板。2、关键字:template,typename,class后二者的作用是一样的变量作为模板的参数:原创 2017-06-17 22:05:20 · 536 阅读 · 0 评论 -
c++远征之模板篇——静态数据成员,静态成员函数
以下内容源于慕课网的学习整理,如有侵权,请告知删除。1、静态数据成员(1)不同于普通的数据成员,静态数据成员在没有实例化时,它也是存在的(即它是和类共存的);(2)它一般不依赖于构造函数的初始化,而往往是单独进行初始化的。(3)访问方式2、静态成员函数(1)静态成员函数不能使用普通的成员函数因为静态成员函数是随着类定义时就原创 2017-06-16 22:16:52 · 1008 阅读 · 0 评论 -
C++远征之封装篇——对象数组,对象成员
一、对象数组1、delet [ ]p,下列会调用三次析构函数二、对象成员1、实例化过程 2、销毁过程恰好相反3、4、原创 2017-04-20 22:26:26 · 529 阅读 · 0 评论 -
C++远航之封装篇——数据的封装
以对象为中心,具体来说,以谁做什么来代表程序的逻辑。所有操作都通过调用自己的函数来完成。数据成员暴露了,不好的设计:数据的封装:原创 2017-04-19 22:28:30 · 717 阅读 · 0 评论 -
c++远征之继承篇——多重继承,多继承,虚继承,多继承时的重复定义解决方法
1、多重继承(1)概念理解2、多继承(1)概念理解3、虚继承(1)问题的引出:多重继承和多继承的结合,造成数据的冗余。 (2)解决方案是,虚继承,此时类D中只会有一份类A的数据(3)虚继承,只要在继承的类前,写上关键字virtual即可。原创 2017-06-16 12:04:35 · 737 阅读 · 0 评论 -
C++远航之封装篇——深拷贝、浅拷贝
1、浅拷贝如下,此时如果同一块内存释放两次,会报错2、深拷贝原创 2017-04-20 22:52:12 · 481 阅读 · 0 评论 -
C++远航之封装篇——析构函数
一、为什么需要析构函数?见博客:http://blog.csdn.net/zhhymh/article/details/6239832二、析构函数的理解1、格式2、必要性释放资源。3、什么时候调用?delet p时会调用析构函数;程序返回时,也会调用析构函数。三、类中的成员函数的总结原创 2017-04-20 21:33:31 · 467 阅读 · 0 评论 -
C++远航之封装篇——默认构造函数、初始化列表、拷贝构造函数
1、默认构造函数没有参数;若有参数,则一定全部都有默认的参数值。2、初始化列表(1)概念(2)特性建议用初始化列表来初始化数据成员。初始化列表先于构造函数执行;初始化列表只能用于构造函数;初始化列表可以同时初始化多个数据成员。(3)必要性如果需要给const修饰的数据成员赋值,必须用初始化列表。原创 2017-04-20 20:58:46 · 743 阅读 · 0 评论 -
c++远征之多态篇——纯虚函数和抽象类、接口类
以下内容源于慕课网的学习整理,如有侵权,请告知删除。1、纯虚函数没有函数体;=0;即只有函数声明,而没有函数定义的虚函数,是纯虚函数。2、抽象类概念:含有纯虚函数的类,叫抽象类。抽象类无法实例化对象。抽象类的子类也可能是抽象类。(1)只有抽象类的子类把抽象类的纯虚函数都给实现了,才能用子类来实例化对象原创 2017-06-16 18:38:54 · 706 阅读 · 0 评论 -
c++远征之多态篇——异常处理
以下内容源于慕课网的学习整理,如有侵权,请告知删除。1、关于异常的一些概念异常:程序运行期出现的错误。数组下标越界;除数为0;内存不足;……异常处理:对有可能发生异常的地方做出预见性的安排。异常处理使用的关键字try { 这下面的代码是主体逻辑 } catch{ 这下面的代码异常处理 }throw xxx 抛出异常,其中xxx可以是数原创 2017-06-16 20:33:16 · 571 阅读 · 0 评论