![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux C /C++
记录学习C++过程中的零碎知识点
鬼话连篇夏洛克
寻求顿悟
展开
-
【C++ 08】运算符重载
1 加号运算符重载通过成员函数重载+号通过全局函数重载+//加号运算符重载class Person {public: //成员函数本质 p3 = p.operator+(p2);Person operator+(Person& p1){ Person temp; temp.m_A = this->m_A + p2.m_A; temp.m_B = this->.m_B + p2.m_B; return temp;}public: int m_A;原创 2020-07-03 01:51:42 · 115 阅读 · 0 评论 -
【C++ 07】类和对象-友元
在程序中有些私有属性,也想让类外特殊的一些函数或者类进行访问,这就需要用到友元技术,友元的目的就是让一个函数或者类访问另外一个类中的私有成员。友元的关键字为friend友元的三种实现方式:全局函数做友元 类做友元 成员函数做友元1 全局函数做友元class Building{ //goodGay全局函数是Building的好朋友,可以访问Building 中的私有成员 friend void goodGay(Building* building); public: Buil原创 2020-07-02 01:38:11 · 213 阅读 · 0 评论 -
【C++ 06】对象模型和this指针
1.成员变量和成员函数分开存储在C++中成员变量和成员函数是分开存储的;只有非静态成员变量才属于类的对象。空类的内存大小为1个字节。class Person{ int m_A; //非静态成员变量,属于类的对象上 static int m_B; // 静态成员变量 类内声明,类外赋值,不属于类 void func() //非静态成员函数,只需一份 { } static void func2() { }};static int m_B = 0;void test01()原创 2020-07-02 00:49:14 · 183 阅读 · 0 评论 -
【C++ 05】类和对象-对象的初始化和清理
1 构造函数和折构函数对象的初始化和清理是两个非常重要的安全问题一个对象或者变量没有初始状态,对其使用后果是未知的;同样的,使用完一个对象和变量,没有及时清理,也会造成一定的安全问题;C++利用了构造函数和析构函数,解决上述问题;这两个函数将会被编译器自动表用,完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制我们做的事情,因此如果我们不提供析构函数,编译器会执行编译器提供的构造函数和析构函数(空实现)构造函数:主要作用是创造对象时为对象的成员属性赋值,构造函数由编译器自动调用原创 2020-07-01 02:15:51 · 315 阅读 · 0 评论 -
【C++ 04】类和对象-封装
C++ 面向对象的三大特性:封装、继承、多态C++认为万物皆为对象,对象上有其属性和行为1 封装的意义封装是C++面向对象的三大特性之一;封装的意义:将属性和行为作为一个整体,表现生活中的事务 将属性和行为加以权限控制;封装意义一:在设计类的时候,将属性和行为写在一起,表现事务;语法:class 类名{ 访问权限 :属性/行为};#include<iostream>using namespace std;//piconst double PI = 3.14原创 2020-06-30 00:47:33 · 129 阅读 · 0 评论 -
【C++ 03】函数提高
1 函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的;如果没有传递参数使用默认值,如果传递了参数,使用传递的值;语法:返回值类型 函数名(参数=默认值){}注意事项1、如果某个位置已经有了默认参数,那么从左到右都必须有默认值2、如果函数的声明有了默认参数,那么函数实现就不能有默认参数 声明和实现只能有一个定义形参默认值/函数的默认参数//语法:返回值类型 函数名(参数=默认值)int func02(int a, int b=20, int c=30){ retu原创 2020-06-29 01:53:19 · 79 阅读 · 0 评论 -
【C++ 02】引用的使用说明
目录1 引用的基本使用2 引用注意事项3 引用做函数参数4 引用做函数返回值2.5 引用的本质2.6 常量引用1 引用的基本使用引用:给变量起别名;语法:数据类型 &别名=原名;int a = 10;int &b=a;2 引用注意事项1.引用必须要初始化,int &b ;//错误;2 .引用一旦初始化之后,就不可以更改;3 引用做函数参数作用:函数传参数时,可以利用引用的技术让形参修饰实参;优点:可以简化指针修改实参原创 2020-06-29 01:11:50 · 137 阅读 · 0 评论 -
【C++ 1】内存分区模型
内存分区模型代码区:存放函数体的二进制代码,由操作系统管理;全局区:存放全局变量和静态变量,以及常量;栈区:由编译器自动分配释放,存放函数的参数值,局部变量等;堆区:由程序员分配和释放,若程序员不释放,程序结束由操作系统释放;不同区域存放的数据,赋予不同的时间周期,给我们更大的灵活编程。1.1程序运行前在程序编译后,生成exe可执行文件,未执行程序部分可以分为两个区域:代码区:存放CPU执行的机器指令,代码区是共享和只读的;全局区:存放全局变量、静态变量以及常量区(字符串原创 2020-06-28 02:53:45 · 251 阅读 · 0 评论 -
Linux内核模块的加载以及内核模块的管理
Linux内核模块在形式上以.ko文件存在,首先需要知道的是内核模块的编译也分为动态编译和静态编译,动态编译模块生成.ko文件。动态模块的加载命令如下:insmod ****.ko,比较常见的是Linxu设备驱动以内核模块的形式存在。关于内核模块管理的常见命令是:lsmod、insmod、rmmod、modinfo、modprobe、depmod一、基本介绍内核模块的管理命令安装在k...原创 2020-05-03 20:47:08 · 1586 阅读 · 0 评论 -
如何区分静态链接库和动态连接库
之前一直不是很理解静态链接库和动态连接库的区别,今天在此做一下汇总。首先从下图了解一下文本文件是如何编译成二进制格式的。【静态链接库】是指在编译的连接阶段将库函数嵌入到应用系统程序的内部。但是如何多次调用,则库函数会被调用很多次,造成极大的空间浪费。他的优势在于,应用程序可以独立运行,因为静态连接的时候已经将所需的组件都已经加载到应用程序中,不需要对于的.a、.lib文件。静态库对于库...原创 2020-05-03 20:08:32 · 785 阅读 · 0 评论 -
如何对没有生成转存核心的程序如何使用gdb进行调试
因为之前一直使用gdb调试工具分析段错误产生的转存核心,这次出现的段错误没有生成转存核心,应该如何使用gdb调试工具进行分析呢?首先第一步是安装调试工具第二步是直接使用gdb l1app (其中l1app为软件编译出来的bin文件)在调试之前需要使用 ldd l1app 查看l1app中的库是否连接正确,如果确实链接库,需要手动连接。第三步进入gdb 命令行界面后输入run 开始执...原创 2020-04-30 09:20:00 · 159 阅读 · 0 评论 -
如何区分C++中的自动存储、静态存储和动态存储
C++中有3种管理数据内存的方式:自动存储、静态存储和动态存储(有时叫做自由存储空间和堆)1、自动存储在函数内部定义的常规变量使用自动存储空间,被称为自动变量这意味着他们所属的函数被调用时自动产生,在函数结束时消亡,如下面程序中的temp数组,当且仅当temp数据活动时存在。当程序控制权回到main时temp使用的内存将被自动释放。如果getname()返回的是temp的地址,在m...原创 2020-04-28 22:32:54 · 726 阅读 · 0 评论 -
如何解决undefined reference to `bblib_idft_burst_fxp'编译时函数未定义问题
本文主要提供一种解决问题的思路:出现的错误如图所示:bblib_idft_burst_fxp在库函数中已经定义了,然而编译的时候显示未定义;经过一天的尝试,最终还是让别人解决了,我在此记录一下方法解决问的思路。通过搜索未定义问题,可以发现,在使用库的时候,很多情况下对于库的顺序由很大的关系;在我在此处并不存在库的顺序问题,但是存在函数调用顺序的问题。bblib_idft_burst...原创 2020-03-31 22:25:08 · 479 阅读 · 0 评论 -
如何打开core转存以及安装debuginfo
首先通过命令:ulimit -c 查看是否打开了core生成的开关,如果是0则表示没有生成,可以使用ulimit -c unlimited命令来打开开关,此命令表示生成的core大小是不受限制的。但仅在shell中执行该命令,在关闭shell之后,命令会失效。如果想在整个系统中生效,方法如下:1) 编辑/root/.bash_profile文件,在其中加入ulitmit -S -c un...原创 2020-03-29 23:54:05 · 401 阅读 · 0 评论 -
安装Cmake时如何解决 Cannot find appropriate C++ compiler on this system
首先说明Cmke安装步骤,以cmake 3.9.2版本为例1、下载安装包 wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz2、解压安装包3、按照顺序执行一下命令cd cmake-3.9.2./configuresudo make && make install在执行./configure时会出现:C...原创 2020-03-29 10:33:55 · 15974 阅读 · 3 评论 -
如何利用Matlab产生单音信号
单音信号,既单一频率的信号,在测试IFFT/FFT正确性时,我们常常用到单音信号,一般需要的单音信号时是复数形式;fm = 2e6 ; %信号频率fs = 122.88e6; %采样速率w = 2*pi*fm;dt = 1/fs;t = 0:dt:dt*3275; %3276个点data = exp(j*w*t);通过欧拉公式可知,利用 exp(j*w*t)即可生成单音信号,...原创 2019-11-04 11:42:16 · 10268 阅读 · 1 评论 -
CentOS7 升级指定版本内核指南
本文主要讲解Centos系统升级内核的详细步骤,主要根据自己遇到的问题,会有侧重点。首先是在安装内核时,遇到空间不足,因为系统初始化时只给boot分配了200M,安装新的内核时显示空间不足,此时的解决办法有两种:①卸载多余的内核②取消boot挂载,直接使用boot目录下面详细讲述第二种方法,取消boot挂载,直接使用boot目录;1. umount /boot //卸载...原创 2019-10-21 15:56:56 · 2720 阅读 · 0 评论 -
查询Linux 服务器信息的常用命令
以下命令可以直接复制:1.查询CPU信息#cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c2.查看内存信息# cat /proc/meminfo内存信息是指运行内存,并不是指磁盘大小;3.查看当前操作系统的内核信息# uname -a4.查看机器型号(即主板)# dmidecode | grep "...原创 2019-07-08 21:37:56 · 3795 阅读 · 0 评论 -
Linux C中段错误常见解决办法
1.如果没有生成core文件,可以查询系统log 通过命令sudo cat /var/log/messages |grep segfault 或者sudo dmesg|grep segfault 来查询段错误的具体信息。这种信息一般都是由内存访问越界造成的,不管是用户态程序还是内核态程序访问越界都会出core, 并在系统日志里面输出一条这样的信息。这条信息的前面分别是访问越界的程序名...原创 2019-06-12 09:21:11 · 2459 阅读 · 0 评论