随笔分类 -  C++重点

上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要:# 79.如果想将某个类用作基类,为什么该类必须定义而非声明? 派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他们是什么。 所以必须定义而非声明。 参考资料来源: 阿秀 阅读全文
posted @ 2023-07-11 15:16 CodeMagicianT 阅读(51) 评论(0) 推荐(0)
摘要:# 78.类如何实现只能静态分配和只能动态分配 1.前者是把new、delete运算符重载为private属性。后者是把构造、析构函数设为protected属性,再用子类来动态创建 2.建立类的对象有两种方式: ① 静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。 阅读全文
posted @ 2023-07-11 15:15 CodeMagicianT 阅读(159) 评论(0) 推荐(0)
摘要:# 77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗? 1.指针参数传递本质上是值传递,它所传递的是一个地址值。 值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。 值传递的特点是 阅读全文
posted @ 2023-07-11 15:15 CodeMagicianT 阅读(120) 评论(0) 推荐(0)
摘要:# 76.方法调用的原理(栈,汇编) 1.机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。而为单个过程分配的那部分栈称为帧栈;帧栈可以认为是程序栈的一段,它有两个端点,一个标识起始地址,一个标识着结束地址,两个指针结束地址指针esp,开始地址指针ebp; 2.由一系列栈帧 阅读全文
posted @ 2023-07-11 15:15 CodeMagicianT 阅读(76) 评论(0) 推荐(0)
摘要:# 75.怎样判断两个浮点数是否相等? 对两个浮点数判断大小和是否相等不能直接用==来判断,会出错!明明相等的两个数比较反而是不相等!对于两个浮点数比较只能通过相减并与预先设定的精度比较,记得要取绝对值!浮点数与0的比较也应该注意。与浮点数的表示方式有关。 参考资料来源: 阿秀 阅读全文
posted @ 2023-07-11 15:14 CodeMagicianT 阅读(120) 评论(0) 推荐(0)
摘要:# 74.指针加减计算要注意什么? 指针加减本质是对其所指地址的移动,移动的步长跟指针的类型是有关系的,因此在涉及到指针加减运算需要十分小心,加多或者减多都会导致指针指向一块未知的内存地址,如果再进行操作就会很危险。 举个例子: ```C++ #include using namespace std 阅读全文
posted @ 2023-07-11 15:14 CodeMagicianT 阅读(63) 评论(0) 推荐(0)
摘要:# 73.全局变量和局部变量有什么区别? C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 全局变量和局部变量主要在作用域、定义位置、内存存储方式、生命期以及使用方式上存在明显的区别。 1.作用域 阅读全文
posted @ 2023-07-11 15:14 CodeMagicianT 阅读(528) 评论(0) 推荐(0)
摘要:# 72.引用是否能实现动态绑定,为什么可以实现? 可以。 引用在创建的时候必须初始化,在访问虚函数时,编译器会根据其所绑定的对象类型决定要调用哪个函数。注意只能调用虚函数。 举个例子: #include using namespace std; class Base { public: virtu 阅读全文
posted @ 2023-07-11 15:13 CodeMagicianT 阅读(118) 评论(0) 推荐(0)
摘要:# 71.静态类型和动态类型,静态绑定和动态绑定的介绍 在C++中,变量的类型可以分为静态类型和动态类型两种。 ## 1.类型 **静态类型**:静态类型是指在程序运行时分配的类型,它们的大小和数据结构在程序运行时就已经确定了,因此可以直接使用int、float等基本数据类型或者自定义数据类型。静态 阅读全文
posted @ 2023-07-11 15:12 CodeMagicianT 阅读(127) 评论(0) 推荐(0)
摘要:# 70.如何获得结构成员相对于结构开头的字节偏移量 使用头文件中的,offsetof宏。 举个例子: ```C++ #include #include using namespace std; struct S { int x; char y; int z; double a; }; int ma 阅读全文
posted @ 2023-07-11 15:11 CodeMagicianT 阅读(50) 评论(0) 推荐(0)
摘要:# 69.C++中将临时变量作为返回值时的处理过程 1.函数返回值的存储位置: - 在C语言中,函数返回值通常会被**存储在寄存器中**(如ax、eax等),而不是堆栈中。这样设计的目的是为了提高执行效率,避免频繁的堆栈操作。 - 在函数调用结束后,返回值**仍然保留在寄存器中**,并且在函数退出时 阅读全文
posted @ 2023-07-11 15:09 CodeMagicianT 阅读(574) 评论(0) 推荐(0)
摘要:# 68.说说移动构造函数 1.我们用对象a初始化对象b,后对象a我们就不再使用了,但是对象a的空间还在呀(在析构之前),既然拷贝构造函数实际上就是把a对象的内容复制一份到b中,那么为什么我们不能直接使用a的空间呢?这样就避免了新的空间的分配,大大降低了构造的成本。这就是移动构造函数设计的初衷; 2 阅读全文
posted @ 2023-07-11 15:09 CodeMagicianT 阅读(42) 评论(0) 推荐(0)
摘要:# 67.写C++代码时有一类错误是 coredump ,很常见,你遇到过吗?怎么调试这个错误? coredump是程序由于异常或者bug在运行时异常退出或者终止,在一定的条件下生成的一个叫做core的文件,这个core文件会记录程序在运行时的内存,寄存器状态,内存指针和函数堆栈信息等等。对这个文件 阅读全文
posted @ 2023-07-11 15:09 CodeMagicianT 阅读(101) 评论(0) 推荐(0)
摘要:# 66.C++函数调用的压栈过程 ## 1.以例子进行讲解 从代码入手,解释这个过程: ```C++ #include using namespace std; int f(int n) { cout << n << endl; return n; } void func(int param1, 阅读全文
posted @ 2023-07-11 15:08 CodeMagicianT 阅读(99) 评论(0) 推荐(0)
摘要:# 65.C++的四种强制转换 ## 1.C语言中的类型转换 ``` C语言和C++都是强类型语言,如果赋值运算符左右两侧变量的类型不同,或形参与实参的类型不匹配,或返回值类型与接收返回值的变量类型不一致,那么就需要进行类型转换。 ``` C语言中有两种形式的类型转换,分别是隐式类型转换和显式类型转 阅读全文
posted @ 2023-07-11 15:08 CodeMagicianT 阅读(248) 评论(0) 推荐(0)
摘要:# 64.成员初始化列表的概念,为什么用它会快一些? ## 1.成员初始化列表的概念 在类的构造函数中,不在函数体内对成员变量赋值,而是在构造函数的花括号前面使用冒号和初始化列表赋值 ## 2.效率 用初始化列表会快一些的原因是,对于类型,它少了一次调用构造函数的过程,而在函数体中赋值则会多一次调用 阅读全文
posted @ 2023-07-11 15:07 CodeMagicianT 阅读(113) 评论(0) 推荐(0)
摘要:# 63.介绍面向对象的三大特性,并且举例说明 三大特性:继承、封装和多态 ## 1.封装 C++中的封装是指将属性和方法包装在一个类中,并通过访问控制符来限制外部对类的访问。封装可以提高代码的可维护性和安全性,同时也可以实现多态性。 在C++中,封装可以通过以下方式实现: 1.使用访问控制符:C+ 阅读全文
posted @ 2023-07-11 15:06 CodeMagicianT 阅读(129) 评论(0) 推荐(0)
摘要:# 62.对象复用的了解,零拷贝的了解 ## 1.对象复用 对象复用是指将已经创建的对象进行重复使用,而不是创建新的对象。在面向对象编程中,对象复用可以通过以下几种方式实现: 1.对象池:对象池是一种常见的对象复用方式,它可以将已经创建的对象保存起来,并在需要时将其重新使用。 2.模板类和模板对象: 阅读全文
posted @ 2023-07-05 10:34 CodeMagicianT 阅读(257) 评论(0) 推荐(0)
摘要:# 61.什么是内存泄露,如何检测与避免 内存泄漏是指在程序运行过程中,一部分程序申请的内存空间由于没有及时释放,导致系统中存在大量的已分配但无法使用的内存空间,最终会耗尽可用内存资源,导致程序崩溃或者运行缓慢。 ## 1.内存泄漏的主要原因包括: 1.忘记释放内存:程序员在使用完已分配的内存后,没 阅读全文
posted @ 2023-07-05 10:12 CodeMagicianT 阅读(293) 评论(0) 推荐(0)
摘要:# 60.C++中新增了string,它与C语言中的 char *有什么区别吗?它是如何实现的? 1.实现方式:string是一种抽象类,它的实现由std::string和char *转换而来。 在实现上,`std::string` 内部通常会使用动态数组来存储字符串,可以动态地分配内存。同时,`s 阅读全文
posted @ 2023-07-05 09:39 CodeMagicianT 阅读(160) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7 8 9 10 下一页