
C++
文章平均质量分 67
C++
W2155
这个作者很懒,什么都没留下…
展开
-
C++二叉搜树的实现(递归和非递归)
左节点的值小于根节点右节点大于根节点左右子树也满足上面两个条件例:arr[] = {5,2,1,3,4,7,6,8} 转化为二叉搜索树。原创 2024-02-29 20:54:26 · 503 阅读 · 0 评论 -
C++多态的原理
含有虚函数的类,都会有一个函数虚表指针,指向函数虚表。_vfptr就是函数虚表指针函数虚表中存储都是函数的地址,函数虚表就是一个函数指针数组。vs下的虚表通常是以0000000结尾的在base中增加个虚函数,看看会不会出现在虚表中。虚表中果然增加了Func2的地址我们增加一个派生类Derive去继承Base Derive中重写Func1我们发现在Derive的虚表中,func1的为位置被覆盖。原创 2024-02-25 22:23:38 · 722 阅读 · 0 评论 -
c++11:异常
在实际开发中,都会有一个异常的体系,因为如果异常是随便抛出的,那可就坏事了,程序员A抛出了一个int,程序员B抛出了一个char*。异常是不能随便抛的,是要有严格规范的。通常都会使用多态,catch基类可以捕捉抛出的派生类的异常。使用基类调用,what这个虚函数。原创 2024-07-19 23:09:28 · 375 阅读 · 0 评论 -
浮点数在内存中的储存规则
浮点数在内存中的存储原创 2023-04-15 13:52:32 · 67 阅读 · 1 评论 -
C++初阶语法之const成员和取地址重载(细节讲解)
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。这个const是加在函数的末尾修饰this指针指向类的成员,因为this指针是隐藏的参数不能写出来,所以规定在函数后面加const修饰this指针指向的成员。原创 2023-09-11 15:55:20 · 85 阅读 · 0 评论 -
C++语法之static成员
答:类内部的成员变量初始化都需走初始化列表,但是static修饰的成员变量和函数是存在静态区,不在类的内部存储,所以没办法走初始化列表,只能在外部手动初始化。答:被static 所修饰的成员和函数,是储存在静态区的,生命周期就是程序的生命周期,相当一个只属于这个类的全局的变量。5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制。答:不可以,因为静态成员函数不储存在类内部,没有this指针。静态成员函数可以调用非静态成员函数吗?static的类成员。原创 2023-09-12 19:38:02 · 63 阅读 · 1 评论 -
手撕C++初阶语法鬼子
作者只是把自己的理解分享给大家,如果有错误的地方请大家及时指正。原创 2023-09-05 07:27:25 · 165 阅读 · 0 评论 -
C++模板介绍
在介绍模板之前,现提出个问题,有函数重载,为什么要引入模板呢?其实在使用的时候也可以发现,函数重载只要新增一个类型,就需要重新写一个函数,非常的不方便,而且如果一个重载写出现问题,其他的重载函数也可能跟着遭殃,非常的不人性,所以就有了模板,我们给参数让编译器生成一份代码,非常的人性。原创 2023-10-13 20:38:43 · 72 阅读 · 4 评论 -
手撕C++初阶语法类和对象(1)
更多精彩内容尽在主页!!!!!!1.对面向对象过程的认识2.类2.1类的访问限定符和封装2.2类的实例化2.3如何计算类的大小3.this指针。原创 2023-09-08 11:23:45 · 51 阅读 · 1 评论 -
C++语法之初始化列表(超级啰嗦版本)
我在中介绍了构造函数,很多人可能理解构造函数的函数体就是将成员变量初始化的过程,但其实不是这样的,构造函数体的内容,只是将我我们初始化好的内容在进行一次赋值。构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。原创 2023-09-11 17:17:49 · 104 阅读 · 0 评论 -
C++必会语法之拷贝构造函数和运算符重载
默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。4.类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请时,则拷贝构造函数是一定要写的,否则就是浅拷贝,浅拷贝就会出现,析构函数的问题。原创 2023-09-10 10:56:41 · 93 阅读 · 1 评论 -
C++必会语法之构造函数和析构函数
构造函数时一个特殊的成员函数,在定义对象的的时候会自动调用,保证对象的成员都有一个合适的初始值。原创 2023-09-08 15:18:44 · 71 阅读 · 1 评论 -
C++多继承之菱形继承原理及解决方法
这里会出现一个问题,Assistant这个类中继承了两个Person类,造成了数据的冗余和二义性。加virtual之后对象A被放在了最底端,之前存放A的位置变成了一个地址。继承是白箱复用,对基类内部可见,一定程度破坏了封装,耦合度高。组和是黑箱复用,对基类内部不可见,没有破坏封装,耦合度低。继承是is-a的关系,就是每一个派生类都是一个基类。组合比继承的可维护性更高,能用组合的地方就用组合。用一个简单的菱形继承模型,在借助内存窗口观察。,基虚表中存的时偏移量,通过偏移量可以找到A。原创 2024-02-24 18:37:26 · 903 阅读 · 0 评论 -
vector迭代器的失效
vector的底层就是由三个指针构成的这个指针指向vector数据起始位置。iterator _finish这个指针指向vector数据的结束位置。iterator _end_of_shorage这个指针指向vector容量的位置。原创 2024-01-19 22:13:33 · 355 阅读 · 0 评论 -
C++继承
1.派生类和基类都是拥有独立的作用域的。2.基类和派生类中据有同名函数,这时候调用这个同名函数,优先调用派生类,基类函数就被隐藏。3.函数名相同就构成隐藏。例:基类func就在派生类bb中隐藏了。B bb;原创 2024-02-24 17:00:48 · 395 阅读 · 0 评论 -
C++多态
1.必须通过基类的指针或者引用调用虚函数。2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。public:cout << "全价票" << endl;cout << "半价票" << endl;children B;fun(&A);fun(&B);原创 2024-02-25 20:48:41 · 484 阅读 · 0 评论 -
C++模板为什么不能声明和定义分离
在test.cpp中add(1,2)会调用add<int>,但是a.cpp中编译器没有看到对add<int>的调用,就不会实例化出一份代码。对语法语义分析,分析无误生成汇编,头文件不参加编译,多个源文件是分开单独编译的。将多个obj文件链接合成一个,并处理没有解决的地址问题。所以在链接时会去寻找被实例化的代码,就会报链接的错误。首先我们要直到C++程序运行需要进行的四个阶段。如果我们模板声明和定义分离会报一个。预处理->编译->汇编->链接。原创 2024-02-23 17:02:41 · 407 阅读 · 0 评论