C++复试
文章平均质量分 84
为了复试C++项目
~|Bernard|
人在考研 有文章代码出错谨请见谅研后再与各位大佬进行指正交流
展开
-
C++之模板和可变模板参数
现在的C++编译器实现了一项新的特性:模板(Template),简单地说,模板是一种通用的描述机制,也就是说,使用模板允许使用通用类型来定义函数或类等,在使用时,通用类型可被具体的类型,如intdouble甚至是用户自定义的类型来代替。模板引入一种全新的编程思维方式,称为泛型编程或通用编程。泛型编程:不是针对某一种具体的类型进行编程,而是针对一类类型进行编程,将类型抽象成T(类型参数化)#形象地说,把函数比喻为一个游戏过程,函数的流程就相当于游戏规则。原创 2024-03-25 11:29:23 · 1050 阅读 · 0 评论 -
C++之移动语义与智能指针
如果右值引用本身没有名字,那右值引用就是右值,如右值引用作为函数返回值。,用来存储指向动态分配(堆空间)对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。std::move()作用于内置类型没有任何作用,内置类型本身是左值还是右值,经过std::move()后不会改变。,提供一个可以自由选择析构的接口,这样,我们的智能指针就可以处理不同形式开辟的空间以及可以管理文件指针。右值引用:可以绑定到右值,但是不能绑定到左值。将左值转换为右值后,左值就不能直接使用了,如果还想继续使用,必须重新赋值。原创 2024-03-24 21:04:53 · 980 阅读 · 0 评论 -
C++之多态
什么是虚函数呢?虚函数就是在基类中被声明为virtual,并在一个或多个派生类中被重新定义的成员函数。是一个成员函数,并且在前面加上virtual关键字如果在基类中定义类虚函数,那么在派生类中该函数就是虚函数,即使在派生类中没有加virtual重定义(重写、覆盖):派生类要保证该虚函数的名字与基类相同,函数的返回类型也要相同,函数的参数列表也要相同(包括参数的个数、参数的类型、参数的顺序),言外之意,唯一可以不一样的,就是函数体。// 类内部class 类名。原创 2024-03-17 17:38:55 · 801 阅读 · 0 评论 -
C++之关联式容器set和map的使用
【代码】C++之关联式容器set和map的使用。原创 2024-03-05 15:36:19 · 282 阅读 · 0 评论 -
C++面向对象之继承
当一个派生类继承一个基类时,需要在派生类的类派生列表中明确的指出它是从哪个基类继承而来的。class 子类(派生类): public/protected/private 父类(基类) //类派生列表//数据成员//成员函数派生类的生成过程包含3个步骤:1. 吸收基类的成员2. 改造基类的成员3. 添加自己新的成员总结:吸收,改造,添加public:, _z(z)print();原创 2024-03-01 15:24:23 · 776 阅读 · 0 评论 -
C++之atexit-pthread用法详解
atexit函数先注册三个func函数,然后等待3秒,再打印”hello main”(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先进后出的原则,所以先注册的函数最后执行。按 POSIX.1-2001 的规定,如果在终止处理程序中调用 longjmp()函数,这样导致的结果是未定义的.原创 2024-02-28 21:37:21 · 891 阅读 · 0 评论 -
C++之标准库中string的底层实现方式
我们都知道, std::string的一些基本功能和用法了,但它底层到底是如何实现的呢?其实在std::string的历史中,出现过几种不同的方式。下面我们来一一揭晓。我们可以从一个简单的问题来探索,一个std::string对象占据的内存空间有多大,即sizeof(std::string)的值为多大?如果我们在不同的编译器(VC++, GNU, Clang++)上去测试,可能会发现其值并不相同;即使是GNU,不同的版本,获取的值也是不同的。原创 2024-02-28 21:08:18 · 778 阅读 · 0 评论 -
C++之类作用域
作用域可以分为几部分内容。在类中定义的成员变量和成员函数的作用域是整个类,这些名称只有在类中(包含类的定义部分和类外函数实现部分)是可见的,在类外是不可见的,因此,可以在不同类中使用相同的成员名。另外,类作用域意味着不能从外部直接访问类的任何成员,即使该成员的访问权限是public,也要通过对象名来调用,对于static成员函数,要指定类名来调用。如果发生“屏蔽”现象,类成员的可见域将小于作用域,但此时可借助this指针或“类名::”形式指明所访问的是类成员,这有些类似于使用::访问全局变量。原创 2024-02-23 15:59:17 · 1067 阅读 · 0 评论 -
C++之运算符重载
由自定义类型向其他类型的转换是由类型转换函数完成的,这是一个特殊的成员函数。operator 目标类型()//...类型转换函数具有以下的特征:1.必须是成员函数;2.参数列表中没有参数;3.没有返回值,但在函数体内必须以return语句返回一个目标类型的变量。int _iy;原创 2024-02-23 11:18:00 · 778 阅读 · 0 评论 -
C++之C++输入输出流
ios是抽象基类,由它派生出istream类和ostream类,iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类。根据不同的情况,对文件的读写操作,可以采用不同的文件打开模式。又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的。比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以。原创 2024-02-20 15:27:44 · 1007 阅读 · 0 评论 -
C++之new和delete表达式
注意:这里需要单独写一个destroy函数,通过调用这个函数来完成堆对象的资源销毁,并且要注意对象本身的资源也需要进行销毁,那么此时this指针就会起到很大的作用,直接delete this即可完成对对象本身的销毁,这一步操作不仅会调用析构函数,还会完成对指针对象的销毁.要达到以上的效果,咱们只需要将operator new放入Student类的private区域。要达到以上的效果,咱们只需要将Student类的析构函数放入private区域。指向新分配并构造的构造函数对象的。,以保存指定类型的一个对象。原创 2024-02-20 10:16:51 · 379 阅读 · 0 评论 -
C++之内存对齐
1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而。原创 2024-02-18 11:24:00 · 294 阅读 · 0 评论 -
C++之类和对象
这个作用是显而易见的。例如当今世界有76亿人,如果不会抽象思维,我们每遇到一个人,都要认知一遍:啊!这个对象有眼睛,有耳朵,有鼻子有嘴,有胳膊有腿……要是真这样,世界也太疯狂了。有了类的概念,我们就可以只记类的数据和逻辑,而对于具体对象,只要知道它属于什么“类”,一切就都知道了,所需要区分的只是不同对象的数据具有不同值而已。接下来,我们就来一步一步地探索C++中有关类的一切。原创 2024-02-18 11:00:56 · 888 阅读 · 0 评论 -
C++之程序内存分配方式
现在的应用程序都运行在一个虚拟内存空间里,以32位系统为例,其寻址空间为4G,大部分的操作系统都将4G内存空间的一部分挪给内核调用,应用程序无法直接访问这一段内存,这一部分内核地址成为内核态空间,Linux默认将高地址的1G空间分配给内核,用户使用剩下的3G空间成为用户态空间,用户态空间一般有如下默认区域:1. 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。原创 2024-02-05 20:35:31 · 738 阅读 · 0 评论 -
C++之字符串
字符串处理在程序中应用广泛,。对字符串进行操作的C函数定义在头文件或中。在使用时,程序员需要考虑字符数组大小的开辟,结尾空字符的处理,使用起来有诸多不便。原创 2024-02-05 20:11:56 · 368 阅读 · 0 评论 -
C++之函数重载,默认参数,bool类型,inline函数,异常安全
内联函数是C++的增强特性之一,用来降低程序的运行时间。编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段。定义函数时,在函数的最前面以关键字“inline”声明函数,即可使函数称为内联声明函数。x : y;原创 2024-02-05 17:16:13 · 732 阅读 · 0 评论 -
C++之强制转换
类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些。另一个缺点就是,c风格的转换不容易查找,它由一个括号加上一个标识符组成,而这样的东西在c++程序里一大堆。原创 2024-02-05 16:43:05 · 314 阅读 · 0 评论 -
C++之引用
变量名实质就是一段连续内存空间的别名。那一段连续的内存空间只能取一个别名吗?显然不是,引用的概念油然而生。在C++中,引用是一个已定义变量的别名。类型 &引用名 = 目标变量名;int a = 1;在使用引用的过程中,1. &在这里不再是取地址符号,而是引用符号,相当于&有了第二种用法2. 引用的类型必须和其绑定的变量的类型相同3. 声明引用的同时,必须对引用进行初始化;否则编译时报错4. 一旦绑定到某个变量之后,就不会再改变其指向。原创 2024-02-05 16:33:03 · 638 阅读 · 0 评论 -
C++之new/delete表达式
实际情况中很多时候一些不太好的实践会导致对象的生命周期变得很长,也叫“内存泄漏”.申请了内存用完了不释放,如申请了1024M内存,分配了512M内存一直不回收,那么可用内存就只有512M,仿佛泄漏掉一部分。只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏。,在C++中提供了新的开辟和回收堆空间的方式,即采用。在C中用来开辟和回收堆空间的方式是采用。原创 2024-02-05 16:03:33 · 187 阅读 · 0 评论 -
C++之const关键字的用法
2)类型和安全检查不同。宏定义没有类型,不做任何类型检查,运行的时候才会发生错误;const常量有具体的类型,在编译期会执行类型检查。1)编译器处理方式不同。宏定义是在预处理阶段展开,做字符串的替换;而const常量是在编译时。常考题:const常量与宏定义的区别是什么?原创 2024-02-05 15:52:12 · 125 阅读 · 0 评论 -
C++历史发展概述
C++发明至今已经三十多年了,从最早的简单面向对象逐渐发展成为包含泛型、函数式、模板元等许多范式的复杂混合体,其中的每一个编程范式都可以自成体系,在开发过程中打出一片天地。二十年前,面向过程、基于对象是C++编程的主流范式;十年前,主流范式变成了面向对象+设计模式.而现在C++编程的主流范式则有“返璞归真”的趋势,过度使用虚函数的庞大类继承体系逐渐被摒弃,而使用泛型、函数式等新型范式开发精致的小类并给予良好的组合成为了大方向。原创 2024-02-01 17:13:30 · 604 阅读 · 0 评论 -
C++之命名空间
命名空间又称为名字空间,是程序员命名的内存区域,程序员根据需要指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。char val2;在声明一个命名空间时,大括号内不仅可以存放变量,还可以存放以下类型:变量,常量,函数(可以是定义或声明),结构体,类,模板,命名空间(可以嵌套定义)struct Foo。原创 2024-02-05 15:35:59 · 814 阅读 · 0 评论