![](https://i-blog.csdnimg.cn/direct/76c42a0f31094f1787c86fec6e29f89f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 87
C++取经之路
UrSpecial
这个作者很懒,什么都没留下…
展开
-
【C++取经之路】map的详细介绍及其使用
理论元素这个名词是出自文档的,我只是知识的搬运工。其实这个底层的红黑树的设计有关。大概是这样子的:它有一个哨兵位结点(上方的),两边的就是理论元素了。原创 2024-09-05 21:32:51 · 533 阅读 · 0 评论 -
【C++取经之路】set的详细介绍及其使用
再谈容器,先问一个问题:何为容器?《STL源码剖析》一书中是这么解释的——容器,置物之所也。根据“数据在容器中的排列”特性,容器可以分为序列式容器和关联式容器两种。序列式容器,其底层为线性序列的数据结构,里面存储的是数据本身。关联式容器,其底层是红黑树(一种平衡搜索树),里面存储的是结构的键值对,也是存储数据本身的。set和map均为关联式容器。原创 2024-09-05 14:59:04 · 320 阅读 · 0 评论 -
【C++入门】内存管理
6)申请自定义类型时,malloc和free只会开辟和释放空间,不会调用构造函数与析构函数,而new在申请空间时会调用构造函数完成对象的初始化,delete在释放空间前,会调用析构函数完成对象中资源的清理。3)malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,在[ ]中指定即可。用户可使用系统接口创建共享共享内存,做进程间通信。2)new和delete申请和释放的是单个元素的空间,new[ ]和delete[ ]申请和释放的是连续的多个元素空间。原创 2024-04-22 00:00:35 · 638 阅读 · 0 评论 -
【C++取经之路】继承
在C++中,继承是一种面向对象编程的重要特性,它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的成员变量(通常称为属性)和成员函数(通常称为方法)。通过这种方式,派生类可以重用基类的代码,并且可以添加或覆盖基类中的方法。根据继承的基类的数量,C++中的继承可以分为单继承和多继承。单继承:指一个派生类只从一个基类派生的情况。多继承:指一个派生类从多个基类派生的情况。单继承:继承,它是一种“is-a”的关系,也就是说派生类是一个特殊的基类。原创 2024-06-13 22:25:24 · 862 阅读 · 2 评论 -
【C++取经之路】多态及其原理
多态,通俗的说就就是多种形态,也就是说,不同的对象去完成同一行为时会产生不同的形态。比如,买高铁票,学生的话是可以打75折的,而非学生的成年人就是全价买票了。在虚函数的后面加上 =0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类)。抽象类不能实例化出对象。继承自抽象类的派生类,如果派生类中不对纯虚函数进行重写,那么派生类就包含了纯虚函数,它便是抽象类,不能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。class Carpublic://纯虚函数。原创 2024-07-18 01:22:38 · 960 阅读 · 0 评论 -
【C++入门】类和对象
类的定义格式:class 类名/ /类体:由成员函数和成员变量组成/ / ……/ /分号不能少class为定义类的关键字。类体中的内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或成员函数。如果成员函数在类中声明和定义,那么编译器可能会把它当做内联函数处理。原创 2024-04-02 00:23:23 · 1072 阅读 · 0 评论 -
【C++入门】类的6个默认成员函数、运算符重载、初始化列表、const成员、static成员
在对象实例化时通过上述的构造函数后,类的成员变量有了一个初值,但这并不是初始化,严格来说,应该是赋值,因为在函数体内,可以给同一变量多次赋值,但每一个变量的初始化只有一次,所以,在函数体内给值根本不叫初始化。上面我们说过,初始化列表是用来给成员变量初始化的,具体的说,是用来给实例化出的对象中的变量初始化的,而静态成员为所有类对象共享,不属于某个具体对象,所以它不是在初始化列表初始化的。不可以,const对象中的成员是不可以修改的,而非const对象中的成员是可以修改的,这是典型的。原创 2024-04-20 13:00:47 · 1081 阅读 · 0 评论 -
【C++】函数模板和类模版
函数模板和类模板是C++模板编程中的两个核心概念,它们允许程序员编写泛型代码,这些代码可以在多种数据类型上工作,而无需为每个数据类型编写单独的实现。这提高了代码的可复用性和灵活性。所以说,模板还是很重要的。【优点】1)复用了代码,更快的迭代开发,C++标准模板库STL因此产生。2)增强了代码的灵活性。【缺点】1)模板会导致代码膨胀问题,也会导致编译时间变长。2)出现模板编译错误时,错误信息非常凌乱,不易定位错误。【模板导致编译时间变长的几个原因】1)类型推导模板在编译阶段需要进行类型推导。原创 2024-06-09 16:59:37 · 1004 阅读 · 2 评论 -
push_back()和emplace_back()的区别
emplace_back()向容器末尾添加元素时,直接在容器内部构造这个元素,而不是先构造一个对象再拷贝或移动到容器中。在底层实现时,emplace_back()的参数会被转发到容器内部新元素的构造函数中。这意味着元素的构造直接在容器的内存位置上进行,避免了不必要的复制或移动操作。push_back()向容器末尾添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中。push_back() -> 构造 + 拷贝构造 / 构造 + 移动。emplace_back() -> 构造。原创 2024-09-01 15:22:25 · 183 阅读 · 0 评论 -
【C++】string类常用函数用法总结
const char& operator[] (size_t pos) const,const_iterator begin() const,const_iterator end() const,const修饰*this,即this指针指向的内容,所以this指针指向的内容不可修改,用法上和其他函数是一样的。resize(size_t n)和resize(size_t n, char c)都是将字符串的有效个数改变到n个,不同的是,当使用 std::string::resize(size_t n)原创 2024-05-13 12:39:13 · 779 阅读 · 0 评论 -
【C++入门】输入输出、命名空间、缺省参数、函数重载、引用、内联函数、auto、基于范围的for循环
命名空间的定义需要用到关键字namespace,格式为:namespace 命名空间的名字/ /……命名空间中可以定义变量、函数、类等。原创 2024-03-31 21:33:20 · 919 阅读 · 2 评论