奔赴Linux
文章平均质量分 85
简单记录从0开始的Linux生活
hudy_
对计算机的一切都感兴趣
展开
-
Linux/C++系统编程 day15
移动语义后置++,–不能取地址,返回的是局部对象(右值)const左值引用称为万能引用, 无法区分出绑定的是左值还是右值编译器优化关掉编译优化-fno-elide-constructors移动语义是为了避免反复构造、析构持有资源的对象(不严格的来说,左值对应变量的存储位置,而右值对应变量的值本身。C++中右值可以被赋值给左值或者绑定到引用。类的右值是一个临时对象,如果没有被绑定到引用,在表达式结束时就会被废弃。于是我们可以在右值被废弃之前,移走它的资源进行废物利用,从而避免无意义原创 2021-01-21 08:50:34 · 151 阅读 · 0 评论 -
Linux/C++系统编程 day14
纯虚函数形式class 类名{public: virtual 返回类型 函数名(参数列表)=0;};作用设置纯虚函数的意义,就是让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供一个合理的缺省实现。所以类纯虚函数的声明就是在告诉子类的设计者,“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现它”。抽象类一个类可以包含多个纯虚函数。只要类中含有(声明)一个纯虚函数,该类便为抽象类,用来作为接口一个抽象类只能作为基类来派生新类,原创 2021-01-19 13:54:08 · 110 阅读 · 0 评论 -
Linux/C++系统编程 day13
继承单继承下基类与派生类之间转化派生类适应于基类,派生类的对象能直接作用于基类对象所能应用的场合派生类对象赋值给基类对象基类引用绑定到派生类对象基类的指针指向派生类对象向上转型:安全,降维打击(派生类转为基类,上一辈)向下转型:很不安全,C++不支持,只能强转(基类转为派生类,下一辈)//不安全的向下转型Derived *pderived1 = static_cast<Derived *>(&base1);//安全的向下转型Base原创 2021-01-15 21:18:02 · 189 阅读 · 0 评论 -
Linux/C++系统编程 day12
标准库String底层实现方式1:深拷贝EC(eager copy)无论什么情况,都是采用拷贝字符串内容的方式解决,在需要对字符串进行频繁复制而又并不改变字符串内容时,效率比较低下方式2:写时复制COW(copy on write)浅拷贝+引用计数refcount,string占8个字节当两个std::string发生复制构造或者赋值时,不会复制字符串内容,而是增加一个引用计数,然后字符串指针进行浅拷贝,其执行效率为O(1)。只有当需要修改其中一个字符串内容时,才执行真正的复制原创 2021-01-15 21:13:33 · 101 阅读 · 0 评论 -
Linux/C++系统编程 day11
运算符重载类型转换其他类型向自定义类型转换只有当类中构造了合适的构造函数时,转换才能成功,被称为隐式类型转换从自定义类型向其他类型转换是由类型转换函数完成的operator 目标类型(){ //...}特征:必须是成员函数参数列表无参没有返回值,但必须return返回一个目标类型变量只有一个类型转换函数,自定义类型向其他类型转换时就会自己调用作用域作用域可以分为类作用域、类名的作用域以及对象的作用域几部分内容类作用域:一个类定义在另一个类里原创 2021-01-14 10:50:56 · 63 阅读 · 0 评论 -
Linux/C++系统编程 day10
运算符重载友元使用形式友元的形式可以分为友元函数和友元类class 类名1{ friend 函数名; friend class 类名2;};函数大致可以分为两种:成员函数和非成员函数(全局函数/自由函数/普通函数)代码示例在math.h头文件中有个hypot(x,y)函数,得到√(x²+y²)class Point;//类的前向声明class Line(){ //不能在这里写函数实现,因为程序执行顺序_ix_iy尚未定义 float distance(co原创 2021-01-14 10:47:01 · 103 阅读 · 0 评论 -
Linux/C++系统编程 day9
日志系统概述记录系统的运行轨迹,在这个基础上,进行跟踪分析错误,审计系统运行流程。一个日志系统根据他的过程,可以分为四个模块日志来源:日志内容可以来源于任何其他系统,但对日志系统来说,这是个格式化的缓冲区系统控制:系统控制的重点在于控制日志内容在日志系统中的流转过程。比如日志输出目的地,比如日志的输出级别日志输出:日志在控制台输出是比较常见的,但如何考虑为系统的可靠性提供支持,以及大量日志内容的情况下,这个一般不予考虑的。在控制台输出的,只会是非常核心的内容或者是致命的错误,况且,在有些情原创 2021-01-12 08:47:38 · 260 阅读 · 0 评论 -
Linux/C++系统编程 day8
C++输入输出流vector动态数组,vector v;最后位置插入,v.push_back(type);当前元素个数,v.size();当前容量,v.capacity();(扩容机制:当size()==capacity()时,如果还要继续插入元素,就会按照2*capacity大小扩容,接着将老的空间元素拷贝到新的空间,然后将新的元素插入到新空间后面,最后将老的空间进行回收虽然造成效率下降,但是如果老空间后面位置不够,直接在其后申请空间就会造成错误)提前预留空间,v.re原创 2021-01-12 08:43:39 · 70 阅读 · 0 评论 -
Linux/C++系统编程 day7
类与对象对象组织const对象类对象可以声明为const对象const对象只能调用构造函数、析构函数、const成员函数指向对象的指针类名 * 指针名 = 初始化表达式;初始化表达式可以通过&对象名初始化,也可以通过动态申请内存,或者干脆不初始化在程序中再对该指针赋值对象数组类名 数组名[对象个数];Point pts[]={Point pt1(1,2) , Point pt2(3,4)};(不能写为Point pts[]={(1,2) , (3,4)}原创 2021-01-11 15:51:20 · 113 阅读 · 0 评论 -
Linux/C++系统编程 day6
类与对象拷贝构造函数类名 (const 类名 &rhs)默认情况下编译器会自动生成拷贝构造函数(浅拷贝,如果有用到new需要手写一个深拷贝)//常见调用形式Point pt1(1, 2);Point pt2 = pt1;调用时机用一个已经存在的对象初始化另一个新对象函数的形参和传入的实参都是对象,进行实参与形参的结合时当函数的返回值是对象,函数调用完成返回时(编译器优化选项 -fno-elide-constructors 关闭优化C++标准允许一种原创 2021-01-11 15:46:02 · 71 阅读 · 0 评论 -
Linux/C++系统编程 day5
类与对象对象的创建与销毁构造函数函数名与类名相同,无返回类型返回值对象在创建的时候会调用构造函数,用以完成数据成员的初始化构造函数不能通过对象以.的方式调用默认情况下编译器生成无参构造函数,如果已经自定义构造函数则不会生成无参构造函数,显然构造函数可以进行重载String str;(创建String类对象)String str();(声明一个空参返回string的函数)初始化表达式每个数据成员初始化顺序由被声明时的顺序决定,与其在初始化列表中顺序无关原创 2021-01-11 15:42:30 · 69 阅读 · 0 评论 -
Linux/C++系统编程 day4
函数重载同一个作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数称为重载函数返回类型可以相同也可以不同,但仅返回类型不同不足以成为函数的重载原理:名字改编名字改编实际上是将函数名与参数列表(参数个数、顺序、类型)结合在一起定义成了新函数显然C语言不支持,而C++支持,C++兼容C时不会按照此方式对其库函数进行名字改编extern “C”{ }花括号内不进行名字改编,将代码在C++中按照C方式编译(但是在gcc中不识别extern,但可以使用C++内置宏,#原创 2021-01-11 15:41:33 · 250 阅读 · 0 评论 -
Linux/C++系统编程 day3
C++应用方向C++头文件都是模板编写,没有.h,而模板有一个特点必须知道所有实现之后才能进行正常编译(cd /usr/include/c++)函数声明和定义(形式上区别,花括号和末尾分号声明可以有多次,定义只能有一次)<<输出流运算符,左移乘2 endl换行>>输入流运算符,右移除2同窗口无法编译运行vimplus中可使用gcc注释一行,u还原或者再按一次运算符重载,视作函数命名空间为什么要使用命名空间?解决函数命名冲突原创 2021-01-11 14:42:00 · 128 阅读 · 0 评论 -
Linux/C++系统编程 day2
linux编译调试1.安装$sudo apt install g++ gcc(一次性安装g++和gcc编译器)2.过程编辑源码→预处理→编译→汇编→链接→可执行程序使用vim hello.c编辑源码使用file hello.o查看文件类型使用nm hello.o查看二进制文件2.1预处理$gcc -E hello.c -o hello.i.i文件,处理以#开头的预编译指令2.2编译$gcc -S hello.c -o hello.s.s文件,翻译原创 2021-01-11 14:18:06 · 117 阅读 · 0 评论 -
Linux/C++系统编程 day1
基本操作增添加用户useraddadduser(新建一个三无用户,无home目录,无密码,shell为sh)sudo useradd -m test -s /bin/bash(创建一个有家目录且shell为bash的用户)添加目录mkdir -p dir1(创建多级目录)mkdir -m 700 test(建立目录同时设置权限)树形结构, /表示根目录创建文件touch file1(改变文件时间戳创建文件)echo “hello wo原创 2021-01-11 14:15:26 · 104 阅读 · 0 评论