![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
文章平均质量分 61
嵌入式Serious
这个作者很懒,什么都没留下…
展开
-
Linux系统下的静态库和动态库
一、两种库的定义和差异1、静态库: 静态库是以libxxx.a命名的库文件(也是一种二进制可执行的代码文件),在编译源程序的时候,如果包含了静态库,则会把整个静态库的数据都编译进程序文件。2、动态库: 动态库是以libxxx.so命名的库文件,与静态库不同,如果源程序使用的是动态库,则不会把库的数据编译进程序,而是当程序运行到某个与动态库相关的函数时,再根据动态库留下的标记,进入动态库中寻找资源。3、两者的区别: 由于静态库在编译程序阶段就把...原创 2021-10-18 21:55:34 · 508 阅读 · 0 评论 -
linux执行程序提示“Bad file descriptor”
一、问题描述 写了一个简单的读写文件程序,提示Bad file descriptor,但是程序会正常生成文件。二、问题分析与解决 使用perror函数,打印出发生错误的地方的信息。 发现是在读文件的时候发生错误,在执行write写文件的时候并无错误提示: 后面发现是打开文件的时候只给了可写权限,程序没有可读权限,才会出现可写,读的时候却报错的情况。 所以即使是提示文件描述符错误,也可能不是因为文件描述符...原创 2021-10-09 21:33:55 · 41400 阅读 · 0 评论 -
C++类和对象特性之继承详解
一、继承的含义由父类(基类)派生出子类(派生类),子类会选择性地继承父类的特性。借此,我们可以减少代码的冗余 提高代码的重用性。二、继承的语法 class 子类: 继承方式 父类名{ //子类新增的数据成员和成员函数 };...原创 2021-05-18 21:06:49 · 404 阅读 · 0 评论 -
C++运算符重载
一、运算符重载的定义对于编译器内置的类型(如int,double)之类的,我们常用的运算符(如“+”,“==”等),是可以自动识别的。但是如果是我们自己定义的类型,编译器并不知道要如何进行操作,如果我们将这个运算符要怎么用告诉编译器,就可以让运算符达到我们想要的操作效果。这个就是运算符重载的定义。二、运算符重载的语法这里涉及关键字operator。具体的语法与定义一个函数类似,为:返回值类型+operator+要重载的运算符+()示例:int operator+ (student &st原创 2021-05-15 20:59:42 · 360 阅读 · 0 评论 -
c++友元详解
一、友元的概述友元依靠关键字friend进行声明。friend关键字只出现在声明处 。其他类、类成员函数、全局函数都可声明为友元 友元函数。友元不是类的成员,不带this指针 。友元函数可访问对象任意成员属性,包括私有属性。二、全局函数做友元全局函数作友元的方法:定义一个全局函数,将其在类内声明(前面加上关键字friend),此时该全局函数就成了这个类的友元,可以访问类内的全部属性#include <iostream>#include <string>u原创 2021-05-10 19:02:37 · 161 阅读 · 0 评论 -
对象模型和this指针
一、对象和成员的存储 系统会给每一个定义了的空对象分配1字节的内存空间,为了标志出改对象在内存中的位置,要是该对象有了一个非静态成员变量,则这个对象的内存为他的非静态成员变量之和。静态成员变量和静态成员函数都不在对象上,因为他们是共享的函数,所以不会储存到某个特定的对象的内存里。非静态成员函数也不在其对象上。...原创 2021-05-09 21:24:10 · 88 阅读 · 0 评论 -
对象的初始化和清理
一、构造函数和析构函数概述 这两个函数是编译器强制执行的,即使用户没有定义,编译器也会自动运行空的构造函数和析构函数。在对对象进行实例化的时候,会执行构造函数。对该对象进行释放的时候,执行析构函数。构造函数的语法 构造函数函数名和类名相同,没有返回类型,连void都不可以,但可以有参数,可以重载。析构函数的语法 析构函数函数名是在类名前面加”~”组成,没有返回类型,连void都不可以,不能有参数,不能重载.class student {public:student() {原创 2021-05-07 20:53:35 · 91 阅读 · 1 评论 -
C++类和对象特性之封装
一、封装概述C++在定义类的时候,可以通过设置不同的访问权限区分开我们想公布或者想隐藏起来的对象的属性。但是对于那些需要保密的数据,我们有时候需要在该类的外部进行修改,所以我们只能定义一些函数接口实现这些保密属性的读写。并且通过不同的设置,我们可以令某种属性只为可读或者可写状态。这大概就是封装的含义二、三种访问权限 public(全局可访问)在这里设置一些全局可修改的属性,另外对后面两个访问权限下的属性的修改接口也是在这里定义。protected(子类可访问)这里涉及到类和对象的另外一个特性原创 2021-05-07 19:56:16 · 67 阅读 · 1 评论 -
C/C++中的引用解析
一、引用的介绍在C语言和C++中有一种使用别名来控制一块内存的做法,这就是引用的主要功能。但是究其本质,还是指针。二、引用的用法用作变量的别名如图,引用b作为变量a的别名,在这种情况下对a或者b进行操作,得到的都是同样的效果。引用函数作为返回值注意:引用函数作为返回值的时候不要返回局部变量的值!!!三、引用的注意事项使用引用时的初始化2.引用在初始化之后就不能再更改四、引用的本质引用的本质其实还是指针常量,int &b=a在编译器中默认为int* const原创 2021-04-30 14:06:32 · 146 阅读 · 1 评论 -
关于C/C++内存四区的分析
一、内存四大区1、我们把程序执行前后的内存分为四个区: 代码区、全局区、栈区、堆区2、但是有一个疑问,这样分类的意义是什么?例如:因为我们在实际编程的时候,需要根据不同的功能需求,会声明不同类型的变量(如全局变量,局部变量,全局常量,字符串常量等),它们拥有不同的长度、生命周期释放方式等。这样就需要存放在不同的内存区域,这样就能提高程序运行效率,更加灵活地编程。二、内存四区的功能代码区这个区域存放函数体的二进制代码.是由操作系统进行管理的。全局区全局区主要是用来存放全局变量和静态常量原创 2021-04-30 11:52:33 · 187 阅读 · 1 评论 -
关于<iostream>和命名空间
由于刚接触c++,对于#inlcude <iostream>using namespace std这两行经常出现的代码感觉挺懵,通过上网查资料,有了以下了解:一、关于 < iostream>和<iostream.h>作为从C语言过来的人,对于<iostream.h>应该不陌生。它是非标准输入输出流,继承C语言的标准库文件,如果使用它的话,我们在使用cin,cout等函数时可以直接使用而不会报错。而对于前者,它属于标准输入输出流,如果选择它的话,如原创 2021-04-22 22:05:36 · 294 阅读 · 0 评论