![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++专栏
文章平均质量分 65
与c++相关博客
C语言扫地僧
有关必回
展开
-
C++ 模板高阶
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-06-23 21:00:13 · 511 阅读 · 0 评论 -
C++ string类型的基本使用方法
/C语言//C++string s1;//默认初始化,s1代表一个空串//与string s2 = “csdn”;等价//初始化一个连续num个字符‘a’组成的字符串还有复制初始化下面会讲到。原创 2023-07-11 11:35:28 · 423 阅读 · 16 评论 -
C++构造函数与拷贝构造函数
在类中有一种特殊的成员函数,它的名字与类名相同,在创建类对象时,这个特殊的成员函数会被系统自动调用,这个函数就叫拷贝构造函数。可以简单理解为构造函数的意义就是初始化类内对象的成员变量。注意构造函数无返回值,一个类中允许多个构造函数的存在。虽然一个类中允许多个构造函数的存在但是要让编译器区分不同构造函数的区别,否则会报错。上面的代码就不允许同时存在。上面代码其实调用的是拷贝构造函数。下面马上来讲解拷贝构造函数。原创 2023-07-12 11:12:06 · 272 阅读 · 4 评论 -
C++ 右值引用
什么是左值?什么是左值引用?左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。什么是右值?什么是右值引用?右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能取地址。原创 2024-04-21 11:35:21 · 288 阅读 · 0 评论 -
C语言 与 C++ 通讯录对比实现(附源码)
在C++版里我们总共用的新的概念有:类,vector,运算符重载,范围for循环,迭代器,内联函数等等。C++源码:test.cpp// 菜单//枚举选项Exit,add,del,Search,modify,Sort,Printint main()int input;do {menu();cout原创 2023-07-17 11:49:26 · 478 阅读 · 29 评论 -
CPP-类对象大小的组成
实际上由于同一个类的每个对象中只有变量不一样,而函数代码都是一样的,所以没有必要每个对象都存一份函数代码。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。要计算一个类对象的大小要先明白一个问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。原创 2024-06-23 18:51:27 · 223 阅读 · 0 评论 -
C++ 深入理解 多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数。2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。虚函数重写的两个例外:1. 协变(基类与派生类虚函数返回值类型不同)原创 2024-04-21 10:28:16 · 911 阅读 · 1 评论 -
C++引用(起别名)
以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。所以引用做函数参数时没有临时拷贝可以提高效率。其实在底层上来说引用是按照指针方式来实现的。但是sizeof(引用)的大小是引用类型的大小而sizeof(指针)的大小是4/8个字节。而且不存在二级引用的说法。原创 2023-10-16 14:22:49 · 317 阅读 · 5 评论 -
C++ 深入理解 继承
本篇文章将谈谈一下几个问题:1.基类和派生类对象赋值转换2.继承中的作用域3.派生类的默认成员函数4.复杂的菱形继承及菱形虚拟继承5.其他。原创 2024-04-20 23:08:32 · 585 阅读 · 0 评论 -
C++析构函数与深,浅拷贝
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。因为我们拷贝的对象与原对象动态开辟的元素共用了一段内存。深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。析构函数与构造函数是相对的,或者说是相反的,定义对象时系统会调用构造函数,对象销毁时系统会调用析构函数。原创 2023-07-13 19:41:47 · 214 阅读 · 7 评论 -
C++ 继承与多态的基本用法
所谓动态其实就是在程序运行的时候(运行到调用fun函数这行代码时)才能知道调用的是哪个子类的fun函数,虚函数因为是在程序运行的时候才知道调用的是哪个虚函数,所以虚函数必须写它的定义部分(以备编译器随时调用)。在C++继承中,子类会遮蔽父类中的同名函数,无论此函数的返回值,参数。也就是说父类和子类中的函数只要名字相同,子类中的函数就会遮蔽掉父类中的同名函数。通过继承父类中有很多成员变量和成员函数就自动继承到了子类中,那么在书写子类的时候就减少了很多代码工作量——只用写子类独有的一些内容即可。原创 2023-07-14 10:33:28 · 207 阅读 · 17 评论 -
不用+号算加法(位运算实现)
在不能使用 + 号的情况下其实很容易想到运用位运算去解决问题,也就是用二进制去表示十进制加法的逻辑。所以我们可以先拆分十进制加法来帮助理解。最近在LeetCode上刷题看到一道非常有意思的题,如何不用+号算加法?我觉得挺有意思的故而分享给大家。(因为 5+7 的不考虑进位的结果是 2 ,遇 10 进位),然后计算进位 5+7。,则 10 与 12 再次相加,得到 22 ,进位为 0 ,则计算到此结束。十进制相加思想:例如 15+07 , 先计算不考虑进位的。当进位为0时结束计算。原创 2023-08-18 10:12:03 · 378 阅读 · 26 评论 -
c++代码模拟实现qt对象树机制
object对象最先调用析构函数,遍历其容器,deleteA对象然后A对象调用其析构函数,遍历到B对象然后B对象调用其析构函数无对象在其容器自此所有对象全部被释放。在qt中当父对象被销毁时,它会自动销毁所有子对象。下面我将用代码简单模拟一下对象树的原理。注意:虽然A对象先调用析构函数但是实际上A对象要等到B对象的生命周期结束之后A对象的生命周期才算结束。我们发现此时在A对象中new出来的B对象并没有被释放,导致内存泄漏了。下面我将对刚才的代码进行一部分的修改。上,这样便形成了一颗简单的对象树。原创 2024-01-06 11:40:38 · 386 阅读 · 3 评论