![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 50
Coder-Goo
这个作者很懒,什么都没留下…
展开
-
多态和强制类型转换探索
不bb,直接上代码static_cast不管向上转换和向下转换都能成功,向上转换:把子类指针赋值给基类指针,该基类指针调用的还是子类的函数,发生错误向下转换: 把基类指针赋值给子类对象,成功实现多态;但是有两种情况,如下:1. 基类指针本来就是指向子类对象,那么向下转换还能访问子类成员(如下面程序的变量a)2. 但是从指向基类对象的基类指针硬转,访问子类成员会发生错误#include<iostream>using namespace std;class Base{pub原创 2021-09-13 17:35:56 · 262 阅读 · 0 评论 -
C++多态详解
面试官夺命连环CALL.C++三特性:继承,封装,多态。什么是多态?- 多态分为静态多态(编译阶段)和动态多态(运行阶段) - 静态多态:函数重载和泛型编程- 动态多态:虚函数 :根据绑定的类型调用响应的函数执行!动态多态依靠虚函数来实现:动态多态三要素:1. 父类有虚函数;2. 子类改写了虚函数;3. 通过父类的指针或引用来调用虚函数, 在运行时,绑定到不同的子类中,产生不同的行为什么是虚函数?虚函数是希望子类改写的函数,将其声明为虚函数我们声明了一个动物类animal,原创 2021-06-29 22:54:33 · 5787 阅读 · 2 评论 -
从内存来看类的继承
C++是面向对象的,那么存在继承关系时,下面四个问题,请作答!1. 那么父类对象可以赋值给派生类对象吗?2. 派生类对象能赋值给父类对象吗?3. 能用父类指针指向派生类对象吗?4. 能用派生类对象指向父类对象吗?实现如下继承:父类animal 和 子类 dog那么派生类dog对象的内存分布如下图继续回答上述问题:1. 那么父类对象可以赋值给派生类对象吗?不能,因为父类对象无法为派生类独有的成员赋值,导致赋值失败!!!2. 派生类对象能赋值给父类对象吗? 可以,因为派生类对象中有父类原创 2021-06-29 20:44:52 · 113 阅读 · 0 评论 -
程序猿面试之堆排序C++实现
程序猿面试之 堆排序 C++堆是一颗完全二叉树,分为大顶堆和小顶堆:大顶堆:每一个结点的值都大于其子节点小顶堆:每一个结点的值都小于其子节点堆排序分为两步:将数组 vec 变为大顶堆,此时头结点 vec[0] 就是最大值将头结点 vec[0] 和尾结点 vec[n-1] 交换,那么交换后,最大值就在尾部为vec[n-1];将vec[0], vec[1], …, vec[n-2];重新构造为大顶堆;即将除去最后一个元素(最大值)的数组重建为大顶堆。此时堆顶vec[0]即为剩下的的元素中的最大值原创 2021-06-29 14:29:49 · 135 阅读 · 0 评论 -
程序猿面试之 堆排序C++实现
程序猿面试之 堆排序 C++堆是一颗完全二叉树,分为大顶堆和小顶堆:大顶堆:每一个结点的值都大于其子节点小顶堆:每一个结点的值都小于其子节点堆排序分为两步:将数组 vec 变为大顶堆,此时头结点 vec[0] 就是最大值将头结点 vec[0] 和尾结点 vec[n-1] 交换,那么交换后,最大值就在尾部为vec[n-1];将vec[0], vec[1], …, vec[n-2];重新构造为大顶堆;即将除去最后一个元素(最大值)的数组重建为大顶堆。此时堆顶vec[0]即为剩下的的元素中的最大值原创 2021-06-29 14:26:17 · 128 阅读 · 0 评论 -
程序猿面试: 归并排序C++实现
归并排序 C++实现归并排序就是二叉树的后序遍历;先一直划分,直到数组中只有一个元素不能划分为止,并对各个子数组排序将两个排好序的数组组合起来void MergeSort(vector<int> &vec, int l, int r) { if(l >= r) return; int mid = l+(r-l)/2; MergeSort(vec, l, mid); //注意区间的划分 Merg原创 2021-06-29 14:10:29 · 109 阅读 · 0 评论 -
程序猿面试之 快速排序算法c++实现
快速排序 C++实现快排就是在数组中选一个元素,称为锚点,然后将数组分为两个部分:左边的值全部小于锚点值,右边的值全部大于锚点值。然后对左右两部分分别递归地使用步骤1,直到数组中只剩一个元素如果面试官问你快排: 可以这样回答:宏观上,快排就是一个二叉树的前序遍历,直接满分好吧!!!下面手撕快排!过程如下:如果要排序数组中下标位于[left,right]区间内的元素;那么指定两个指针i和j;使i=left, j = right;i从前往后遍历找到大于锚点的数,j从后往前遍历,找到小于锚点的数原创 2021-06-29 09:26:18 · 252 阅读 · 0 评论 -
用宏来实现两数交换
TP面试让实现一个交换两数的宏,给我整懵了,回来查了资料实现如下:记录一下自己的成长,做一个笔记,能帮到有缘人是最好了!!!#include<iostream>#define SWAPVALUE(a,b) {(a)=(a)+(b);(b)=(a)-(b);(a) = (a)-(b);}int main() { int x = 1; int y = 2; int temp = 0; SWAPVALUE(x,y); std::cout<<原创 2021-06-09 15:27:23 · 1608 阅读 · 1 评论 -
C++ 基础之权限:Public,Private,Protected以及在继承时出现的问题
C++有三种权限public 公有private 私有protected 保护在类内使用在类内可以定义函数或成员的权限,class类内默认是private,struct类内默认是public。 但编程的时候最好显示指明函数或成员的权限,使得代码便于阅读和逻辑清晰,也是一个良好的编程习惯。在类的内部(定义类的部分),无论public,private,protected都能访问。在类的外部(定义类的代码之外),只能通过对象访问成员,并且对象只能访问public属性的成员,不能访问privat原创 2021-06-07 21:49:02 · 491 阅读 · 0 评论 -
配置Vscode+mingw64进行C/C++程序编写
vscode是一款轻量化简洁的文本编辑器,支持插件扩展,功能强大,是软件开发利器。现在网上好多VSCODE软件配置已经过时了,这两天把VSCODE得配置重新弄了一下,也是记录一下自己的成长,帮助大家更快更好的搭建自己的开发环境。vscode是一款文本编辑器,是用来写代码的,如果要进行代码编译还需要下载编译器MinGw-w64Vscode下载:Vscode下载mingw-win64下载:MinGw-win641. VSCODE安装VSCODE安装:下载好安装程序后,点击运行,出现下面界面,点击同意原创 2021-06-06 15:21:05 · 697 阅读 · 0 评论