![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
柘木木
这个作者很懒,什么都没留下…
展开
-
介绍一下c++中的多态
在运行的时候才确定调用的是哪个函数,这种方式叫做动态连接,或者叫做晚绑定,实现的主要手段有重写(也叫覆盖),以及虚函数,比如基类中有一个方法使用了虚函数,基类的指针可以指向基类的对象也可以指向派生类的对象,在该方法使用了虚函数的情况下,要根据所指向的对象来调用方法,因此说运行的时候才确定调用的是哪个函数。是在编译时就确定了函数的类型和会调用哪个函数,这种方式叫做静态连接或者早绑定,静态多态主要实现手段有函数重载,运算符重载以及使用模板,这些都是在编译时就确定了函数的类型。原创 2024-03-12 16:46:20 · 137 阅读 · 0 评论 -
const的用法
而且我认为是形参的const指针和实参的const指针根本不是一个东西,可以看到输出的地址根本不一样,只是所指向的内存空间一样罢了,你在函数里面修改形参的指针与外面实参的指针无关。由上面const指针和被const修饰的指针可以知道,被const修饰的指针是可以改变所存储地址,但是不能改变所指向的内容的。如果形参是被const修饰的指针,那么这个指针是不允许修改所指向变量的值还是不允许修改指针本身所存储的地址?可见,被const修饰的形参指针是无法修改所指向的值的,那么可以修改指针所存储的变量地址吗?原创 2024-03-12 14:37:39 · 300 阅读 · 0 评论 -
c/c++的内存分配,详细说一下栈、堆和静态存储区
静态存储区:静态存储区又叫做数据段,初始化的全局变量和初始化的静态变量都存放在静态存储区,如果没有初始化的话,就会放在另一块地方,叫做BBS段(Block By Symbol 符号开始的块)。栈区(Stack):由编译器自动分配和回收,栈中存放函数调用的相关信息,栈帧(记录函数的栈帧开始的位置),参数,局部变量,返回地址。其操作方法类似于数据结构中的栈。堆区(Heap):由程序员自己分配和释放堆中的内存空间,如果程序员没有释放则由操作系统来收回。文字常量区:存放字符串常量存放在这里,程序结束后由系统释放。原创 2024-03-13 19:32:13 · 423 阅读 · 0 评论 -
说说你对c和c++的看法,c和c++有什么区别?
7. c++可以使用const定义的常量来开辟数组,而c语言不可以,原因是数组的大小(如arr[SIZE]中的SIZE)必须是一个编译时常量,而在c++中,const关键字定义的常量被认为是编译时常量,而c语言不是。1. c语言是面向过程的语言,而c++是面向对象的语言,那么面向对象的语言是什么?6. c++所有非静态函数和全局变量默认是外连接而c变量和函数默认是内连接,如果是外连接的话,意味着在整个程序中都是可见的,而在c语言中内连接使得全局变量和函数只有在声明它们的源文件可见。原创 2024-03-13 18:58:01 · 279 阅读 · 0 评论 -
函数指针和指针函数
参数列表,函数括号里面的整个部分就代表参数列表,而特征标它包括函数名称,参数的个数,参数的类型以及参数的顺序,有时还包括const以及volatile修饰符,但是不包括返回值,函数重载和覆盖都是通过特征标来判定的,注意,这两条赋值方式效果上完全相同,我们知道函数名代表函数的地址,此处的&Test仅仅是帮助理解我们需要的是函数的地址,而不是真的去取了函数地址的地址,只是帮助理解。比如一个函数接收的一个参数是一个函数指针,则只要作为参数的函数指针的类型满足该函数,则都可以套入该函数来执行相同的操作。原创 2024-03-13 16:17:44 · 263 阅读 · 0 评论 -
vector与list的区别与应用?
vector和数组类似,vector是一个在内存中连续存放且可以自动增长的容器,因此支持随机访问,随机访问的时间复杂度是O(1),跟数组类型。因为是连续存放的,因此插入和删除元素的时间复杂度较高(除了在尾部进行插入和删除),原因是插入元素需要将该位置的元素后面的所有元素都移动出一格来存放该插入元素,删除就要将该位置后面的元素往前挪,因此其为O(n)。list是由双向链表实现的,双向链表就是结点有三个成员,分别是当前结点的值,指向上一个结点的指针以及指向下一个结点的指针。vector与list的区别与应用?原创 2024-03-13 14:54:17 · 445 阅读 · 0 评论 -
移动构造函数
移动构造函数就是当你将一个右值引用(如临时对象)作为参数来创建对象的构造函数,移动构造函数的参数是右值引用,移动构造函数的作用就是将右值引用所指向的对象的内存空间让给移动构造函数所要生成的对象,只是将一个对象的资源转让给另一个对象,相当于把这片内存改了个名字,原来是右值引用所指向的对象拥有的内存,变成了调用移动构造函数的对象的内存,并没有开辟新的内存。移动赋值运算符也是同理,将右值引用所指向的对象所拥有的内存空间转让给了其他对象,也没有开辟新的内存。什么是移动构造函数和移动赋值运算符?原创 2024-03-13 12:41:14 · 217 阅读 · 0 评论 -
介绍一下左值右值,左值引用和右值引用
右值在c++11中又分为纯右值和将亡值,常量和临时变量都是纯右值,纯右值就是传统意义上的右值,纯右值在它的表达式结束后就会被销毁。详细的说,左值是有明确的地址,是具有名字的,是可以对左值进行取地址操作的,因为它在内存中有明确的地址和名字,可以赋值也可以被赋值,比如说变量,数组等都是左值。右值在内存中没有明确的地址,没有名字,不能长期在内存中驻留,不能对右值进行取地址的操作。先说左值和右值,简单来说可以放到等号左边的值叫做左值,可以放到等号右边的值叫做右值。原创 2024-03-13 12:18:03 · 145 阅读 · 0 评论 -
重载和覆盖以及隐藏有什么区别?
重新定义,我们知道重新定义将隐藏方法,在派生类重新定义方法有点像重载,但是重载一般发生在一个类中而且不要求像重写一样参数列表和函数名都相同,而这里的重新定义发生在派生类中,此时派生类将隐藏基类的同名方法,而只使用派生类重新定义的同名方法。重写指的是派生类重写基类的方法,更改方法的行为,需要注意的是重写基类的方法要求派生类的方法必须与基类的方法具有完全相同的方法名以及参数列表,这时候如果通过派生类对象调用派生类方法的时候将会调用派生类的方法而不是基类的方法。重载和重写以及重新定义(隐藏)有什么区别?原创 2024-03-12 18:36:00 · 214 阅读 · 0 评论 -
static的用法和作用
如果定义的是静态类成员,比如静态成员变量和静态成员函数。其原因是,静态变量和全局变量都是存储在静态存储区(程序的数据段),而非栈区,局部变量存储在栈上,当函数调用结束时,栈上的内存将会被自动清理,所以局部变量会被消除。报错,说找不到静态函数fun的定义,所以我们说静态成员函数只有定义了它所在的文件可以调用,但是全局的函数non_static_fun是可以被调用的。在一个函数中定义静态局部变量的时候,该静态局部变量的生命周期将贯穿整个程序的运行期,而不会像局部变量一样函数运行结束的时候就被销毁。原创 2024-03-12 13:18:18 · 293 阅读 · 0 评论 -
虚函数与纯虚函数有什么区别?
除了纯虚函数是派生类必须实现的,其他都是根据自己的需求看自己想不想重写该虚函数,在派生类需要有不同的行为,那么就需要重写该虚函数。而纯虚函数是必须要提供实现的。派生类一定要定义继承而来的虚函数嘛?原创 2024-03-09 11:45:49 · 317 阅读 · 0 评论 -
私有派生和公有派生是不是都会在派生类创建一个基类的无名对象?
私有派生会在私有派生类中创建一个无名的基类对象,而公有派生不会创建一个无名的基类对象,而是将基类的成员作为其自己的成员,原来什么属性在公有派生类中就是什么属性,但是公有派生类无法直接访问继承而来的公有基类的成员变量。并不是,只有私有派生会,公有派生不会,私有派生的私有派生类中会创建一个私有基类的无名对象,而公有派生是将公有基类成员变成公有派生类的一部分,原来是什么样在公有派生类中就是什么样。,公有派生类无法直接访问公有基类的私有成员,只能通过调用继承的公有基类的方法来操作公有派生类的私有成员。原创 2024-03-08 12:31:55 · 196 阅读 · 0 评论 -
在多文件编译时,如果模板类的成员函数的定义和模板类不在一个文件下会怎么样?
编译器将找不到成员函数的定义,哪怕你将存放成员函数定义的test.cpp一块编译,编译器也无法找到该模板类的成员函数的定义。将模板类的声明和成员函数定义都定义在.h文件下。原创 2024-03-07 19:06:46 · 169 阅读 · 0 评论