自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 C++继承(二)

注意:对于B、C类虚继承A类,然后D类继承B、C类,D类对象d的内存空间使用情况如上,可以看出d的内存空间使用分别是:B类自己的成员_b,以及一个指针;理解:其实就是子类对象实例化时,需要传入参数(可能没有),并且想用参数来构造处从父类继承而来的那部分,那么就需要手动的调用父类的构造函数(子类构造函数实现处),通过子类实例化传进来的参数,如果不需要指定继承而来的那一部分,就无需显示调用父类的构造函数,但是这样的前提是父类有默认构造函数,如果没有,想要构造出子类对象,就必须指定继承而来的成员的参数才可以。

2024-08-23 01:26:03 849

原创 C++继承(一)

派生类无论用那种继承方式,都会继承基类的所有成员,即可以理解为继承方式是用于自己(派生类)对于基类的访问权限,而基类自己的访问限定符是基类自己的成员可以提供给外界访问的范围。即可以理解为:派生类自己决定的对于基类的访问限定和基类本身对外界的访问限定共同决定,取其小者。但是特别的:有一个要重点注意:基类本身的private的成员,派生类不可见(不可访问),但是存在。但是:父类的对象不能赋值给子类的对象、指针、引用。记住:子类的对象、指针、引用可以赋值给父类的对象、指针、引用(可以缩小)。

2024-08-21 23:09:57 282

原创 为什么模板不能分离编译?

以上图的流程为例:当整个工程汇编完,进行链接,Test.o文件中未确定的部分(如函数的地址等)需要到Func.o文件中去查找,查找到后就将Test.o填充完整,这样才是正常的链接过程。其实不难猜出,因为模板仅仅只是模板还没实例化处具体的类或者函数,它根本就还没确定下来,它是没有地址的,而链接恰恰是去找地址,那么怎么可能链接成功?将一整个模板全都放在头文件里面。缺点:牺牲了头文件的可读性,后期代码维护难度增加。1.显示实例化模板。缺点:可能要进行多次相同操作。模板分离编译导致的问题?

2024-08-17 21:44:55 473

原创 C++的deque原理、deque的优缺点、为什么选择deque作为stack和queue的底层默认容器?

deque的优势刚好可以被stack和queue利用到,而恰恰最巧妙的是deque的遍历和随机访问这两个缺点刚好被stack和queue因后进先出和先进先出的特性而避开。

2024-08-15 11:32:36 658

原创 C++栈和队列,容器适配器

个人理解:其实栈和队列就是容器适配器,他们都是容器转换出来的,即如stack可以使用数组也可以使用链表,其实就是给这个数组或者链表加上一些特性使得使用于某些特定的场景,如stack和queue都是容器适配器,stack这个容器适配器适用于某一些后进先出的场景;而queue这个容器适配器适用于先进先出的场景(打印机的打印顺序)

2024-08-13 22:16:47 71

原创 C++的list的const_iterator实现的关键点理解

相反的,如果是const list<T>对象,那么其迭代器将可读不可写,即该const list<T>对象可读不可以写。其实这三个参数是为了实现const_iterator而准备的,这三个模板参数有两种形态分别是<T,T&,T*>和<T,const T&,const T*>分别对应普通list对象和const list对象的迭代器,前者的迭代器可以对list<T>对象可读可写,后者的迭代器对list<T>对象仅仅可读。

2024-08-12 17:34:11 534

原创 关于编码问题

早期编码是ascii编码,英文中一般只有26个字母还有各种特殊符号,所以ascii编码表使用一个字节大小(256种可能,足够来表示英语中各种字符字符)来存储英文字符跟1-256之间的对应关系。那么中文该怎么样表示呢?那么unicode就解决了这个问题:一个中文可以用两个英文字符来表示,最后存储时再将这两个英文字符转换成ascii码值来存储,一般两个英文字符可以有256*256=65536种可能,已经涵盖了绝大多数汉字,一些生僻字可以特殊的使用3个英文字符来表示。

2024-06-20 23:42:26 161

原创 string类的迭代器

而对应的begin函数也有rbegin函数(从字符串的结尾开始):普通对象调用rbegin函数就调用普通版本的begin函数(返回类型是reverse_iterator);如果是const对象调用begin或者end函数,那么就会调用被const保护的begin函数,同时请注意const保护的begin函数返回类型是const_iterator(这跟iterator是两个不同的类注意区分),所以接收时也需要用const_iterartor来接收。注意:end()返回的是最后一个位置的下一个位置。

2024-06-16 23:40:56 792

原创 string类的6个构造函数

大多数情况下:我们使用实例化一个string对象多数使用:无参构造,传参构造,拷贝构造,还有构造n个相同字符的字符串对象 这四个构造函数来构造对象。//如果第3个参数没给,从pos开始考npos个,npos被定义为static const size_t npos = -1;//注意:第二个参数的类型需要是size_t的,即无符号整型。//上述是文档对于该构造函数的解释,从目标字符串对象的第pos个开始拷贝,直到拷贝外len个字符为止。

2024-06-16 19:32:16 531

原创 C++在C语言上做了哪些改良(基于当前学习进度认知)

1,构造函数和析构函数,即便我们不定义这两个函数,编译器也会帮我们自动生成,当我们实例化一个类对象时,编译器会自动调用构造函数来初始化;2,跟C语言的结构体相比,C++有访问限定符如:public,private等,private区域的需要类成员或者友元才访问,外界不能直接访问。3,模板,对于相同功能的类或者函数,可以做成模板,使用时只需指定类型即可实例化出对应的函数或者类(注意:实例化过程是在预处理阶段进行的)2.C语言的封装性做的不好,一个结构体变量谁都可以访问,这样很不安全。

2024-06-13 23:51:59 432

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除