![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
C++学习路上的陪伴者
佰无一用是书生
这个作者很懒,什么都没留下…
展开
-
C++学习之虚指针与虚表(动态绑定、多态)、this指针(侯捷老师)
2、静态绑定一定是通过call函数,调用某个特定的地址,而动态绑定,是通过指针来调用;之后,这个指针必须是向上转型,比如是class C的指针,但是该指针实际上包含A的特性,那么就属于向上转型;至于调用哪个函数呢,需要看p指针指向的是什么。这里也可以理解多态,虚机制,动态绑定,实际上他们三个基本上是一码事。1、class A有虚函数,因此会有虚指针,虚指针(virtual pointer)指向一个表即虚表,virtual table,虚表中存放的都是函数指针,指向虚函数(非虚函数不用管)。原创 2023-06-15 10:34:33 · 346 阅读 · 0 评论 -
C++学习之引用与指针(侯捷老师)
2、引用常见的使用就是在于参数传递这里,函数调用的时候使用的和传值长相一样,但是在函数定义的时候我们要声明参数为引用。在函数体内使用该引用的时候也是与直接传值的使用方式一样。但是传引用比传值快,因为引用的底层也是使用指针执行。1、引用就是原来的变量,老师讲引用代表原来的变量,而指针指向原来的变量,从下面的图可以看出,指针的大小是4个字节(32位机器),但是引用还是8个字节,原创 2023-06-14 22:13:47 · 70 阅读 · 0 评论 -
C++学习之虚函数和多态(侯捷老师)
2、下面是虚函数最重要的一种用途:我们使用子类创建一个对象,通过该对象去调用父类的函数,当调用到虚函数的时候,系统会发现该函数在子类中有覆写,因此回到子类里面进行函数操作,之后再去父类进行操作,然后回到主函数。非虚函数,你不希望子类重新定义他。原创 2023-06-05 16:42:01 · 58 阅读 · 0 评论 -
C++学习之组合与继承(侯捷老师)
实际上,我们知道deque指的是双端队列,而queue只是普通的先进先出的队列,因此双端队列的功能更加强大,所以队列的很多函数的实现可以直接使用双端队列中已经实现好的函数。3、委托:通过指针委托别的类进行本类中函数的设计,好处是将来需要类实现别的功能,我们直接将其指向另一个类就可以,换句话说,不需要对当前类进行改动就可以实现类的功能的改进。可以注意下面函数调用的顺序,构造的时候是父类写在外面因此先调用父类,析构的时候将父类的析构函数卸载了内部,因此是后调用父类的析构函数。继承的主要使用还是搭配虚函数一起。原创 2023-06-05 15:10:26 · 153 阅读 · 0 评论 -
C++学习之堆、栈与内存管理(侯捷老师)
构造函数这里可以发现实际上省略了this指针,谁调用构造函数this指针就是谁,那么这里this指针就是新的变量即pc。实际上,按照下图右上角的写法可以知道,析构函数我们会将该变量指向的那一块动态申请到的内存空间释放,然后再调用operator delete函数(实际上是free())进行该变量本身(也就是一个指针)释放。1、第一行的内存空间在栈上,无需手动释放,作用域结束之后该变量会自动销毁。,只有带了方括号,在运行delete的时候才会执行三次析构函数进行对应指针指向的内存空间的释放,原创 2023-06-01 16:39:58 · 74 阅读 · 0 评论 -
C++学习之三大函数:拷贝构造、拷贝赋值、析构(侯捷老师)
2、浅拷贝,如果不写拷贝构造的话,直接使用系统的赋值,会导致内存泄漏,如下图所示,b=a(b的指针会指向a,因为data里面只有两个指针,如果a指向的内容更改的话会影响到b,并且原先b指向的内容泄露)。1、第一行就是正常的构造函数,给指针赋初始值为0,第二行因为构造的内容也是自己的这种类型因此叫拷贝构造,同理,第三行的重载也是重载的自己本身类型的东西,因此叫拷贝赋值,最后一行是析构函数。3、深拷贝,首先开辟足够大的空间来存放另一个数据的蓝本,然后再将数据存放在该空间上。原创 2023-06-01 15:26:59 · 87 阅读 · 0 评论 -
C++学习之操作符重载与临时对象(侯捷老师)
2、什么情况不可以返回引用而需要返回值呢?答案:当创建的为临时对象的时候不能返回引用,因为本行结束之后临时对象会被销毁,而外面通过引用来访问该对象的时候就会导致错误。这里创建临时对象的方法是类名之后直接加括号,而不是像之前那样实例化然后进行创建。1、this指针:谁调用,这里的this就是谁,实际上this指针是这个调用者的地址,这里我们可以看到,this是c2的地址。操作符实际上是一个函数,C++支持对这个函数进行重载,我们使用成员函数即在class中进行重载。下面的就是生命周期只有运行的哪一行的演示。原创 2023-06-01 11:28:39 · 55 阅读 · 0 评论 -
C++学习之参数传递与返回值(侯捷老师)
1、传递参数or传递指针(引用):传递参数的话可能传递很多,导致传递的速度变慢,那么传递指针的话一般效率比较高并且传递的速度也比较快,这里我们说的指针实际上是reference也就是引用。因此我们应该建立良好的习惯,传递的时候直接传递引用而不是传值。注意,传递地址的话可能存在的情况是,在函数中对这个值进行了改变,那么就会影响外面这个值,因此我们可以考虑使用const进行引用的传递来避免这种情况。而且同一个class中的不同函数之间互为友元,因此下面途中直接对复数的实部虚部进行提取是被允许的。原创 2023-05-31 20:48:17 · 126 阅读 · 0 评论 -
C++学习之构造函数(侯捷老师)
因为初始化是构造函数独有的,因此推荐我们学习初始化这种较为正规的写法进行构造函数初值的处理。这里说的是不带指针的构造函数,一般不需要写析构函数,但是后面涉及到带指针的话,比如字符串那种,一般就需要写上析构函数。2、访问级别:私有成员即private里面一般写的是变量,所以不能让外面访问,而public里面一般写的是函数,函数支持别人调用,因此可以公开。下面的例子也表明了,通过实例的函数进行实部虚部的访问可以,但是直接通过打印的方式获取实部虚部是会出错的。3、构造函数:首先,原创 2023-05-31 16:17:11 · 91 阅读 · 0 评论 -
C++学习之头文件与类的声明(侯捷老师)
2、标准的头文件写法(防御式声明):在写头文件的时候,下面的写法较为标准,即需要表示该内容如果没有被编译的话那么才进行下面的函数体,否则不会对下面的内容进行编译,按照老师的讲法,这样避免了多次引用该文件,而对相同的内容进行多次编译的情况,程序会报错。1、C++代码的基本形式如下,需要一个.h文件来进行类的声明,之后通过.cpp文件进行具体的操作,同时可能会使用到标准库的东西,因此经常也会对标准库进行引入。原创 2023-05-31 15:22:32 · 234 阅读 · 0 评论 -
C++中max_element和min_element用法
刷LC碰到这两个函数的使用,感觉出镜率比较高,简单总结一下,附上代码以供参考,函数的参数应该输入的是vector的始末地址,需要注意的是:使用该函数包含的头文件是:#include <algorithm>/*param begin : 序列起始地址(迭代器)param end : 序列结束地址(迭代器)return : 序列中最小元素地址(迭代器)*/min_element(begin, end); /*param begin : 序列起始地址(迭代器)param en原创 2022-03-19 11:24:40 · 2453 阅读 · 0 评论 -
C++中istringstream的使用
最近刷LeetCode,碰到了字符流输入输出的问题,看到题解中比较棒的方法,利用了输入输出流的知识,百度一番,前来做个小总结:istringstream是一个比较有用的c++的输入输出控制类。C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含这个头文件。①istringstream类用于执行C++风格的串流的输入操作。②ostringstream类用于执行C风格的串流的输出操作。③strstream类同时可以支持C风格的串原创 2022-01-13 10:38:41 · 3306 阅读 · 0 评论 -
Clion:warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
解决方案:在出现本问题的代码文件最上方添加一行代码即可# pragma warning (disable:4819)然后再次编译,即可通过运行,此行代码主要让编译器忽略该Warning原创 2021-09-17 12:17:51 · 635 阅读 · 0 评论 -
C++之lambda表达式的值捕获与引用捕获
//值捕获void fcn1(){ size_t v1 = 42; auto f = [v1] {return v1;}; v1 = 0; auto j = f(); cout << "j = " << j <<endl;}分析:lambda采用值捕获的方式,该方法在lambda创建的时候拷贝,因此即使随后修改了捕获变量的值,也不会影响到lambda内对应的值。//引用捕获void fcn2(){ size_原创 2021-07-21 10:41:31 · 2737 阅读 · 0 评论