C++语言
文章平均质量分 63
发烧的CPU
你不是菜,你是不够自信并且不够努力!
展开
-
多态——C++第三大特性
Func1完成了重写,所以d的虚表中存的是重写的Derive::Func1,所以虚函数的重写也叫作覆盖。一个含有虚函数的类中都至少有一个虚函数表指针,因为虚函数的地址要被放到虚函数表中,虚函数表也叫虚表。如果基类的析构函数为虚函数,此时派生类析构函数只要定义,无论是否加virtual关键字,学生买票时,是半价买票;派生类重写基类虚函数时,与基类虚函数返回值类型不同。(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变。原创 2022-12-14 21:04:25 · 262 阅读 · 1 评论 -
继承——C++第二大特性
4、派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员,保证派生类对象先清理派生类成员再清理基类成员。1、子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义,可以使用基类::基类成员显示访问。第一,基类的私有成员被继承到了派生类中,语法上限制派生类对象在类里类外都不能去访问它。派生类对象可以赋值给基类的对象、基类的指针、基类的引用,俗称称甩刀手切割。1、派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。6、派生类对象清理先调用派生类析构再调用基类析构。原创 2022-12-12 10:30:15 · 621 阅读 · 9 评论 -
再谈模板哈哈哈
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2022-12-10 15:14:01 · 63 阅读 · 1 评论 -
list类的模拟实现
🐙🐙🐙🐙🐙🐙欢迎来到我的博客🐙🐙🐙🐙🐙🐙。原创 2022-12-08 18:50:56 · 117 阅读 · 2 评论 -
stack和queue
1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作p原创 2022-12-08 09:30:46 · 102 阅读 · 1 评论 -
list类的常用接口
目录一、list的构造二、迭代器的使用三、插入删除等修改操作四、resize/swap/clear五、源代码二、迭代器的使用三、插入删除等修改操作四、resize/swap/clear五、源代码原创 2022-12-05 10:19:08 · 146 阅读 · 7 评论 -
迭代器失效问题
迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃。2、指定位置元素的删除操作erase如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是没有元素的,那么pos就失效了。删除vector中的所有偶数,看看哪个代码是正确的?😀😀😀🐕🐕🐕🤔🤔🤔3、Linux下,g++编译器对迭代器失效的检测不是非常严格,处理也没有vs下极端4、与vector类似,string在插入+扩容操作+erase之后,迭代原创 2022-12-04 14:50:14 · 718 阅读 · 1 评论 -
vector类的模拟实现
一、构造和销毁二、vector中的迭代器三、容量操作四、元素访问五、修改操作六、源代码原创 2022-12-03 14:46:58 · 169 阅读 · 0 评论 -
string类的常用接口说明
一、string类对象的常见构造。二、string类对象的容量操作。四、string类对象的修改操作。五、string类非成员函数。三、类对象的访问及遍历操作。温馨提示:只讲常用接口,使用方法说明详见代码注释。原创 2022-11-29 10:19:14 · 620 阅读 · 3 评论 -
你真的会写日期吗?
日期-日期 返回天数。原创 2022-11-27 13:18:41 · 109 阅读 · 4 评论 -
什么是模板?
对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。类模板实例化需要在类模板名字后根,然后将实例化的类型放在中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。(2)显示实例化:在函数名后的中指定模板参数的实际类型。原创 2022-11-26 18:08:57 · 276 阅读 · 5 评论 -
你不知道的类与对象冷知识
比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制。在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还。友元关系不能传递:如果C是B的友元, B是A的友元,则不能说明C时A的友元。友元函数可以在类定义的任何地方声明,不受类访问限定符限制。原创 2022-11-23 20:51:54 · 407 阅读 · 5 评论 -
轻松拿下——类的默认成员函数
s2对象使用s1拷贝构造,而Stack类没有显示定义拷贝构造函数,则编译器会给Stack类生成一份默认的拷贝构造函数,默认拷贝构造函数是按照值拷贝的,即将s1中内容原封不动地拷贝到s2中,因此s1和s2指向了同一块内存空间。用户没有显示实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝(内置类型成员变量直接赋值,自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值)。创建类类型对象时,由编译器自动调用,保证每个数据成员都有一个合适的初始值,在对象整个生命周期内只调用一次。原创 2022-11-23 09:31:05 · 576 阅读 · 4 评论 -
火眼金睛巧辨C与C++的不同之处
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。(2)命名空间可以嵌套 (3)同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中2、命名空间使用(1)加命名空间名称及作用域限定符(2)使用using将命名空间中某个成员引入(3)使用us原创 2022-11-20 09:55:11 · 4563 阅读 · 14 评论