C++
yaoyaoqiekenaoo
这个作者很懒,什么都没留下…
展开
-
软件设计模式总结
思维OO思维:谁拥有数据,谁拥有职责;告诉而不是询问;面向对象即每一个对象不仅拥有数据还要有行为,负责任; 数据都是private, 通过函数来获取数据、设置数据;方便改动 电脑主板,代码中留有插口,可扩展。 将变化分离,动态绑定,单一职责;防止类爆炸,提高灵活性,自由组合;原则模式模式一观察者模式适用场景:一对多;(例如: 控制多个屏幕显示气象信息)内容:控制者类中,存在一个list<oberver>容器,当消息改变时,直接遍历整个list进行广播即可。..原创 2021-10-18 15:52:22 · 331 阅读 · 2 评论 -
关于default 和 delete
1. big three 构造,析构,拷贝构造,拷贝赋值。 如果没有定义这四个函数,编译器会自动生成默认函数。 一旦自己定义了,则编译器不会产生默认版本。不能仅声明,否则编译报错。 如果自己还想要默认版本怎么办? A() = default; 仅限构造函数,因为其他函数只能有一个。2. delete 可以作用于任何函数。 只不过,作用于 big three 之外的函数没啥意义。你自己写的函数,又delete掉,自相矛盾。3. default 仅能作用于 bi...原创 2021-09-24 16:17:25 · 268 阅读 · 0 评论 -
动态绑定+虚析构函数
一、动态绑定(多态)(一)动态绑定(多态)的实现条件 1. 通过指针调用函数 2. 虚函数 3. 必须是向上转型(即 用基类指针指向子类对象)(二)动态绑定的实现过程1. 首先说明类对象的内存空间如果这个类有虚函数,则内存空间会包含一个虚指针。虚指针指向一块内存空间,保存了虚函数的地址。2. 向上转型时 A* a=new B(),具体发生了什么?1)内存方面,首先明确一点,只存在一个内存空间,即 new B()时产生的。a 也指向这块空间。所以,此...原创 2021-09-24 14:48:53 · 406 阅读 · 0 评论 -
float double 的范围以及 有效数位
1. float double 的存储方式 float 4字节,double 8字节 分为指数部分和尾数部分: https://blog.csdn.net/C2681595858/article/details/84865920 浮点数的进制转换:https://blog.csdn.net/C2681595858/article/details/538442652. 可表示范围 因为指数部分的存在,范围非常大;但是受困于 有效数位,所以这个大的范围几乎没有意义。...原创 2021-08-10 15:20:48 · 1183 阅读 · 0 评论 -
对‘vtable for g2o::EdgeLinear’未定义的引用
vtable 一出现就是虚函数的问题,这里是因为 g2o 中将 read write 函数定义为纯虚函数 即 加上了 =0 ; 而自己定义的类行 edgelinear 中没有对 read write 函数进行定义。 因此报错。原创 2021-07-30 11:19:55 · 165 阅读 · 0 评论 -
缺省参数放在哪里?
1. 定义 or 声明 都可以2. 不能既在定义中指定默认参数,又在 声明中指定默认参数。 如果两次指定值 相同还好,如果不同则报错。3. 建议在声明中 指定默认参数,可以被用户看到。参考:https://blog.csdn.net/sailor_8318/article/details/3348383?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai.原创 2021-07-29 14:44:43 · 108 阅读 · 0 评论 -
C++ 前置声明
1. 解决互相依赖的问题2. 只能声明为 指针或者引用类型3. 做了前置声明就不用include 头文件了,但是 cpp文件中还是需要 include 头文件参考:https://blog.csdn.net/qq_33375598/article/details/89329723原创 2021-07-28 18:15:56 · 71 阅读 · 0 评论 -
static && extern
static: https://www.runoob.com/w3cnote/cpp-static-usage.html 1. 可以作用于 函数 , 变量2. 其声明周期是整个程序结束,但是static 并不会改变 函数 or 变量 的作用域。(即, 在a 文件中定义的static 对象,并不能够在 b 文件中引用;如果想使用,那就是extern 关键字的作用了)3. static 变量一般会在声名处初始化,如果没有显示初始化,会默认初始化为0 初始化操作仅会执行一次ext...原创 2021-07-27 13:38:00 · 81 阅读 · 0 评论 -
智能指针和移动语义
这是两个不同的概念,不能混淆,没有联系!!!1. 智能指针的实现主要是:计数器 + 写时拷贝参考:https://blog.csdn.net/weixin_43297891/article/details/1147789052. 移动语义: 是用来解决 不必要的拷贝 问题如果使用智能指针,就没必要使用移动语义构建 move 构造函数,move 赋值函数了。std::move 的作用就是 左值转为右值;emplace_back :// 总结:// 1. emplace.原创 2021-07-20 15:48:53 · 189 阅读 · 0 评论 -
用临时对象进行初始化时,不会调用拷贝构造函数
因为编译器进行了优化,参考:https://blog.csdn.net/flowerjiashug/article/details/111629531原创 2021-07-20 10:54:14 · 442 阅读 · 0 评论 -
【转载】C++11 move带来的高效
前言 继续阅读之前,你最好了解了左值,右值,左值引用,右值引用等概念 引入 我由浅入深的引入move,先来看一个例子: 自己实现一个string类CMyString(简单实现了几个需要的函数),相信很多c++程序员面试的时候都会遇到,代码如下 // #include "stdafx.h"#include <iostream>using namespace std; class ...转载 2021-07-19 15:02:45 · 164 阅读 · 0 评论 -
【转载】C++11 forward完美转发
前言 继续阅读之前,你最好了解了左值,右值,左值引用,右值引用等概念。 最好阅读了C++11 move带来的高效 引入 这里我借上一篇C++11 move带来的高效中的CMyString类用一下,代码如下 class CMyString{public: CMyString(char* pStr) : m_pStr(NULL) , m_nLen(0) { if (NULL != pStr) { ...转载 2021-07-19 14:41:53 · 136 阅读 · 0 评论 -
侯捷STL(一)
1. 可以在 前面列出的网站上查到 每个容器相应操作的复杂度2. set map的底层是 红黑树实现的。红黑树是二叉树的一种。即高度平衡二叉树。左右子树的高度基本一致。3. vector 2倍扩展: 空间浪费; list,set , map 每次扩展 1 个 ; deque 扩展一个 buffer 8个4. forward-list 单向链表:只能push_front5. 如果容器有自己的sort, 必须使用自己的; 如果没有,就使用全局的sort。因为自己的肯定是经过特殊处理,会更快。.原创 2021-07-15 20:22:51 · 259 阅读 · 0 评论 -
std::vector 初始化的问题 reserve resize
1. reserve 只是开辟了内存空间,并不改变verctor中实质的元素数量。2. resize 只负责改变vector 中的元素数量。初始化:std::vector<double> vec(4);// vector有四个元素vec[0] = 1.0;// 需要这样做,如果push_back就会在原来的基础上增加元素,变成8个vec[1] = 1.0;vec[2] = 1.0;vec[3] = 1.0;std::vector<double> .原创 2020-09-03 10:14:55 · 1436 阅读 · 0 评论