后端开发
C++ 标签描述

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 C11新标准中最重要的特性之一就是引入了支持对象移动的能力,为了支持移动的操作,新标准引入了一种新的引用类型——右值引用,右值引用一个重要的性质就是只能绑定到一个将要销毁的对象。对对象执行移动操作后要确保源对象处于可析构的状态,源对象随时可能被销毁,所以程序在之后不要再去使用源对象的值,同时也要保证源对象析构之后不会对移入对象产生副作用。移动语义的加持使得移动一个如容器之类的大对象的成本可以像复制一个指针一样低廉了,于是出现了各种各样的传言:如...

  9c2DmW5eOllx   10天前   16   0   0 C++

C构造函数 构造函数是C中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。 构造函数类型 C支持多种类型的构造函数,用于满足不同的初始化需求: 默认构造函数:不带参数的构造函数,通常用于初始化对象的默认状态。 带参数构造函数:允许传入参数来初始化对象的状态。 拷贝构造函数:用于从另一个已存在的对象创建新对象。 移动构造函数:用于从即将销毁的临时对象转移资源到新对象。 默认构造函数 默认构造函数是最简单的构造函数,不接受任何参数。它通常用于为对象的属性设置默认值,或者执行简单的初始化操作。 classPerson{...

  YHTQQsaAg9bB   5天前   8   0   0 C++

试题B:小球反弹 我在刷博客的时候看见有人分享了蓝桥杯的题目,我想起了我之前大学打蓝桥杯刷题的时光,还是很怀念当时打比赛的氛围,关于这个小球反弹的题目,我感觉很有意思,我一开始也是走了好多弯路,然后去上了一个厕所,突然茅塞顿开,想到了一个很简单的方法,也看了一圈大家对这道题的结局方法,基本上以遍历枚举出结果为主,和我的思路不太一样,所有想分享给大家看一下我的想法,大家可以先看一下题目呢 错误尝试 我刚看到这个题目的时候,我最先想到的方法是通过定义y=kx+b的方式来模拟小球反弹的运动曲线,然后通过这个曲线方程来看他到底是碰到了长方形的长还是长方形的宽,因为通过一元一次方程来模拟运动函数,基本上...

  kFFoMnoqbq7H   9天前   12   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 接下来的几篇将会讲解非静态数据成员的存取分析,讲解静态数据成员的情况请见上一篇:《深度解读《深度探索C对象模型》之数据成员的存取效率分析(一)》。 普通数据成员的访问方式 接下来的几节讨论的都是非静态数据成员的情况,非静态数据成员都是存放在对象中的,类的定义中相同名称的数据成员在每个对象中都是相互独立存在的。访问非静态数据成员必须通过隐式的或者显示的类对象来访问,否则将没有权限访问。如通过显示的方式访问: classObject{ public...

  9c2DmW5eOllx   7天前   16   0   0 C++

class_template 类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。类模板用于实现类所需数据的类型参数化 template<classNameType,classAgeType> classPerson { public: Person(NameTypename,AgeTypeage) { this->mName=name; this->mAge=age; } voidshowPerson() { cout<<"name:"<<this->mNa...

  3dygdw7fVgD7   2天前   7   0   0 C++

C多级继承 多级继承是一种面向对象编程(OOP)特性,允许一个类从多个基类继承属性和方法。它使代码更易于组织和维护,并促进代码重用。 多级继承的语法 在C中,使用:符号来指定继承关系。多级继承的语法如下: classDerivedClass:publicBaseClass1,publicBaseClass2,...{ //...成员函数和属性 }; 在这个例子中,DerivedClass从BaseClass1和BaseClass2继承。这意味着它将继承这两个基类的所有属性和非私有成员函数。 多级继承的优点 代码重用:多级继承允许您从现有类中继承代码,减少重复开发并提高代码效率。 代码组织:...

  YHTQQsaAg9bB   2天前   9   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 假如有这样的一段代码,代码中定义了一个Object类,类中有一个成员函数print,通过以下的两种调用方式调用: Objectb; Objectp=newObject; b.print(); p->print(); 请问这两种方式有什么区别吗?在效率上一样吗?答案是不确定。因为得看成员函数print的声明方式,它可能是静态的,可能是非静态的,也可能是一个虚函数。还得看Object类的具体定义,它可能是独立的类,也有可能是经过多重继承来的...

  9c2DmW5eOllx   5天前   14   0   0 C++

C类方法 类方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型: 类内定义方法:直接在类定义内部声明和定义方法。 类外定义方法:在类定义内部声明方法,并在类外部单独定义方法。 类内定义方法 在类定义内部可以直接声明和定义方法,这是一种简洁的方式。 示例: classPerson{ public: voidintroduce(){ cout<<"Hello,mynameis"<<name<<endl; } stringname;//属性 }; intmain(){ Personp1; p1.name...

  YHTQQsaAg9bB   9天前   10   0   0 C++

C总结与剖析:关键字篇-<<C语言深度解剖>> 目录 C总结与剖析:关键字篇-<<C语言深度解剖>> 程序的本质:二进制文件 变量 1.变量:内存上的某个位置开辟的空间 2.变量的初始化 3.为什么要有变量 4.局部变量与全局变量 5.变量的大小由类型决定 6.任何一个变量,内存赋值都是从低地址开始往高地址 1.1关键字auto 1.2关键字register 什么样的变量可以采用register? 1.3.1多文件(extern): extern 头文件 1.03.2static 进程地址空间 1.4类型 ...

  R9V40EduS1j1   3天前   12   0   0 C++

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取编程资料 介绍 函数跳转是要给IDE中非常重要也非常常用的功能,而原生的Vim并不提供这个功能,这个确定有点让人遗憾,按理说这么常用的功能应该是要提供的。但是没有关系,有插件可以实现这样的功能更,借助像ctags这样的插件来实现。 安装ctags 在CentOS或者OpenEuler系统中,可以通过以下命令安装: sudoyuminstallctags 在Ubuntu系统下,可以通过以下命令安装: sudoapt-getinstallctags 当然包名可能有所区别,这个要看各个厂商的命名规...

  oaRbYQvpZaaT   11天前   25   0   0 C++

C递归 递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。 递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。 递归示例 将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将其分解为将两个数字相加的简单任务,使用递归将一系列数字相加: intsum(intk){ if(k>0){ returnk+sum(k1); }else{ return0; } } intmain(){ intresult=sum(10); cout<<result; return0; } 示例解释 当调用su...

  YHTQQsaAg9bB   11天前   25   0   0 C++

1.C10Kproblem 最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程),但当连接数来到10K时,就需要不停地买服务器了.DanKegel在1999年提出了著名的世界难题:“c10kproblem”。那时的服务器还只是32位系统,运行着Linux2.2版本(后来又升级到了2.4和2.6,而2.6才支持x86_64),只配置了很少的内存(2GB)和千兆网卡。此时距离Redhat发布POSIXThreadLibrary(NPTL)还有4年时间,内核调度实体都是进程,内核并没有真正支持线程,还不能创建成千上万的线程.此时Windows还在时不时蓝屏···...

  5ixybSny6Da0   12天前   18   0   0 C++

前言 要理解C的六种内存序,我们首先须要明白一点,处理器读取一个数据时,可能从内存中读取,也可能从缓存中读取,还可能从寄存器读取。对于一个写操作,要考虑这个操作的结果传播到其他处理器的速度。 并且,编译器的指令重排和CPU处理器的乱序执行也是我们需要考虑的因素。   我们先看一个具体的例子,下图中P1和P2指代不同的processor,假设P2缓存了Data的值 P1先完成了Data在内存上的写操作,Data=2000; P1没有等待Data的写结果传播到P2的缓存中,继续进行Head的写操作,Head=1; P2读取到了内存中Head的新值; P2继续执行,...

  zmdlW8Gb4mGv   9天前   11   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 在《深度解读《深度探索C对象模型》之C对象的内存布局》这篇文章中已经详细分析过C的对象在经过封装后,在各种情况下的内存布局以及增加的成本。本文将进一步分析C对象在封装后,数据成员的存取的实现手段及访问的效率。在这里先抛出一个问题,然后带着问题来一步一步分析,如下面的代码: classPoint{}; Pointp; Pointpp=&p; p.x=0; pp->x=0; 上面的代码中,对数据成员x的存取成本是什么?通过对象p来存...

  9c2DmW5eOllx   8天前   15   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 没有启用返回值优化时,怎么从函数内部返回对象 当在函数的内部中返回一个局部的类对象时,是怎么返回对象的值的?请看下面的代码片段: classObject{} Objectfoo(){ Objectb; //... returnb; } Objecta=foo(); 对于上面的代码,是否一定会从foo函数中拷贝对象到对象a中,如果Object类中定义了拷贝构造函数的话,拷贝构造函数是否一定会被调用?答案是要看Object类的定义和编译器的...

  9c2DmW5eOllx   9天前   10   0   0 C++

C_template c提供了函数模板(functiontemplate.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。 c提供两种模板机制:函数模板和类模板 类属:类型参数化,又称参数模板 函数模板 函数模板是C中的一种特性,它允许你编写一个通用的函数,能够处理不同类型的数据,而不需要针对每种类型编写多个函数。通过函数模板,你可以编写一次代码,然...

  3dygdw7fVgD7   9天前   15   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 第一篇请从这里阅读:深度解读《深度探索C对象模型》之C虚函数实现分析(一) 这一篇主要讲解多重继承情况下的虚函数实现分析。 在多重继承下支持虚函数,主要体现在对第二及其后继的基类的处理上,下面我们以一个具体的例子来讲解: include<cstdio> classBase1{ public: virtualBase1()=default; virtualvoidvirtual_func1(){printf("%s\n",__PRET...

  9c2DmW5eOllx   4天前   14   0   0 C++

写这个随笔说一下C的static_cast和dynamic_cast用在子类与父类的指针转换时的一些事宜。首先,【static_cast,dynamic_cast】【父类指针,子类指针】,两两一组,共有4种组合:用static_cast父类转子类、用static_cast子类转父类、使用dynamic_cast父类转子类、用dynamic_cast子类转父类。搞清楚了这4种情况,这篇文章的任务也就达成了。 先说结论,后面给出一个作者觉得通俗易懂的理解: 1. static_cast:父类转子类:可以转,不报错,不安全; 2.static_casrt:子类转父类:可以转,不报错,安全;...

  51W0KX9NVoMu   4天前   12   0   0 C++

C访问说明符 访问说明符是C中控制类成员(属性和方法)可访问性的关键字。它们用于封装类数据并保护其免受意外修改或滥用。 三种访问说明符: public:允许从类外部的任何地方访问成员。 private:仅允许在类内部访问成员。 protected:允许在类内部及其派生类中访问成员。 示例: classPerson{ public: stringname;//公共属性,可从外部访问 private: intage;//私有属性,仅在类内部可见 protected: stringaddress;//受保护属性,可在类及其派生类中访问 }; 解释: 在Person类中,name属性是公共...

  YHTQQsaAg9bB   4天前   10   0   0 C++

接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。 前面两篇请通过这里查看: 深度解读《深度探索C对象模型》之数据成员的存取效率分析(一) 深度解读《深度探索C对象模型》之数据成员的存取效率分析(二) 这一节讲解具体继承的情况,具体继承也叫非虚继承(针对虚继承而言),分为两种情况讨论:单一继承和多重继承。 单一继承 在上面的例子中,所有的数据都封装在一个类中,但有时可能由于业务的需要,需要拆分成多个类,然后每个类之间具有继承关系,比如可能是这样的定义: classPoint{ intx; };...

  9c2DmW5eOllx   6天前   17   0   0 C++