【C/C++笔试练习】公有派生、构造函数内不执行多态、抽象类和纯虚函数、多态中的缺省值、虚函数的描述、纯虚函数的声明、查找输入整数二进制中1的个数、手套
文章目录
- C/C++笔试练习
- 选择部分
- (1)公有派生
- (2)构造函数内不执行多态
- (3)抽象类和纯虚函数
- (4)多态中的缺省值
- (5)程序分析
- (6)重载和隐藏
- (7)虚函数的描述
- (8)纯虚函数的声明
- (9)虚函数的实现
- (10)程序分析
- 编程题 day15
- 查找输入整数二进制中1的个数
- 手套
C/C++笔试练习
选择部分
(1)公有派生
在公有派生的情况下,派生类中定义的成员函数只能访问原基类的()
A. 公有成员和私有成员
B. 私有成员和保护成员
C. 公有成员和保护成员
D. 私有成员,保护成员和公有成员
答案:C
在公有派生(public derivation)的情况下,派生类中的成员函数可以访问基类的公有成员和保护成员。 私有成员只能由基类自己访问,不能被派生类访问。
(2)构造函数内不执行多态
有如下C++代码:
struct A{void foo(){printf("foo");}virtual void bar(){printf("bar");}A(){bar();}
};struct B:A{void foo(){printf("b_foo");}void bar(){printf("b_bar");}
};
A *p = new B;
p->foo();
p->bar();
那么输出为()
A. barfoob_bar
B. foobarb_bar
C. barfoob_foo
D. foobarb_fpp
答案:A
#include<iostream>
using namespace std;struct A {void foo() { printf("foo"); }virtual void bar() { printf("bar"); }//3.父类的bar虚函数,在子类重写A() { bar(); }//2.构造子类B对象的时候会先构造父类A
};//但是这里不会调用子类的bar函数,因为在构造函数期间,虚表尚未形成
//所以也无法实现多态,这里仍然调用的是父类的bar函数
struct B :A {void foo() { printf("b_foo"); }void bar() { printf("b_bar"); }
};int main()
{A* p = new B;//1.多态的信号 //barp->foo(); //barfoop->bar();//此时多态实现 //barfoob_bar
}
(3)抽象类和纯虚函数
关于抽象类和纯虚函数的描述中,错误的是
A. 纯虚函数的声明以“=0;”结束
B. 有纯虚函数的类叫抽象类,它不能用来定义对象
C. 抽象类的派生类如果不实现纯虚函数,它也是抽象类
D. 纯虚函数不能有函数体
答案:D
纯虚函数的定义:
virtual void fun()=0;
A选项:纯虚函数的声明以“=0;”结束
。
B选项:有纯虚函数的类叫抽象类,它不能用来定义对象。这也是正确的。由于有纯虚函数,所以没有实现,因此不能创建对象。
C选项:抽象类的派生类如果不实现纯虚函数,它也是抽象类。这也是正确的。如果派生类没有实现基类的纯虚函数,那么它仍然是抽象类。
D选项:纯虚函数不能有函数体。这是错误的。纯虚函数可以有函数体。
(4)多态中的缺省值
以下程序输出结果是()
class A
{
public:virtual void func(int val = 1){std::cout<<"A->"<<val <<std::endl;}virtual void test(){func();}
};class B : public A
{
public:void func(int val=0) {std::cout<<"B->"<<val <<std::endl;}
};int main(int argc ,char* argv[])
{B*p = new B;p->test();return 0;
}
A. A->0
B. B->1
C. A->1
D. B->0
答案:B
在这里插入代码片
(5)程序分析
下面程序的输出是()
class A
{
public:void foo(){printf("1");}virtual void fun(){printf("2");}
};class B: public A
{
public:void foo(){printf("3");}void fun(){printf("4");}
};int main(void)
{A a;B b;A *p = &a;p->foo();p->fun();p = &b;p->foo();p->fun();A *ptr = (A *)&b;ptr->foo();ptr->fun();return 0;
}
A. 121434
B. 121414
C. 121232
D. 123434
答案:B
int main(void)
{A a; B b;A* p = &a;//1.1父类指针指向父类对象p->foo(); p->fun();//1.2父类指针直接调用父类函数,打印12p = &b;//2.1由于赋值兼容规则,此时形成多态p->foo(); p->fun();//2.2父类指针调用父类函数foo(),父类指针调用子类函数fun(),打印14A* ptr = (A*)&b;//3.1该写法和第二个完全一样,只是把指针p换成了指针ptrptr->foo(); ptr->fun();//3.1所以根据多态,打印14return 0;
}
(6)重载和隐藏
如果类B继承类A,A::x()被声明为虚函数,B::x()重载了A::x()方法,在下述语句中哪个x()方法会被调用()
B b;
b.x();
A. A::x()
B. B::x()
C. A::x() B::x()
D. B::x() A::x()
答案:B
虽然此时A,B中的x构成多态,但是我们调用的是B类型子类对象,b的函数x,子类对象直接调用子类函数,和多态无关。
(7)虚函数的描述
下面关于虚函数的描述,错误的是
A. 在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B. 基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C. 虚函数可以是另一个类的友元函数,但不能是静态成员函数
D. 基类中说明的纯虚函数在其任何需要实例化的派生类中都必须实现
答案:B
A. 在C++中,使用virtual关键字可以声明一个虚函数,这使得派生类可以重写该函数。
B. 在C++中,如果基类的成员函数被声明为虚函数,那么派生类可以不用重写这个函数。只有当派生类选择重写这个函数时,它才需要使用virtual关键字。
C. 虚函数可以是另一个类的友元函数,但它们不能是静态成员函数。这是因为静态成员函数是与类关联的,而不是与类的实例关联的。而虚函数是一种动态绑定的机制,它需要在运行时根据对象的实际类型来调用对应的函数。
D.如果一个基类的成员函数被声明为纯虚函数,那么任何派生类都需要实现这个函数。纯虚函数是一种特殊的虚函数,它没有实现,因此需要派生类来实现。
(8)纯虚函数的声明
下列为纯虚函数的正确声明的是()
A. void virtual print()=0;
B. virtual void print()=0;
C. virtual void print(){};
D. virtual void print();
答案:B
纯虚函数的定义:
virtual void fun()=0;
(9)虚函数的实现
下面这段代码运行时会出现什么问题?
class A
{
public:void f(){printf("A\n");}
};class B: public A
{
public:virtual void f(){printf("B\n");}
};int main()
{A *a = new B;a->f();delete a;return 0;
}
A. 没有问题,输出B
B. 不符合预期的输出A
C. 程序不正确
D. 以上答案都不正确
答案:B(C也对)
class A
{
public:void f()//父类没有虚函数,没有产生虚表,父类就无法提供指针{printf("A\n");}//virtual void x() {};//添加一个虚函数就可以解决
};class B : public A
{
public:virtual void f()//释放空间的时候,指针就会非法访问空间{printf("B\n");}
};int main()
{A* a = new B;a->f();delete a;//非法访问,程序崩溃return 0;
}
(10)程序分析
下面这段代码会打印出什么?
class A
{
public:A(){printf("A ");}~A(){printf("deA ");}
};class B
{
public:B(){printf("B ");}~B(){printf("deB ");}
};class C: public A, public B
{
public:C(){printf("C ");}~C(){printf("deC ");}
};int main()
{A *a = new C();delete a;return 0;
}
A. A B C deA
B. C A B deA
C. A B C deC
D. C A B deC
答案:A
class A{
public:A()//1.3调用A的构造{printf("A ");}~A()//2.1直接调用A的析构,因为没有A~写成虚函数,无法调用子类析构{printf("deA ");}//会造成内存泄漏//加上析构即可解决内存泄漏问题//virtual ~A()//{printf("deA ");}
};class B{
public:B()//1.4调用B的构造{printf("B ");}~B(){printf("deB ");}
};class C : public A, public B{//1.2此时先调用A的构造,再调用B的构造
public:C(){printf("C ");}~C(){printf("deC ");}
};int main()
{A* a = new C();//1.1创建子类对象C,用父类指针A指向delete a;//2.1调用A的析构return 0;
}
编程题 day15
查找输入整数二进制中1的个数
查找输入整数二进制中1的个数
解题思路:本题是计算一个数二进制表示中1的个数,通过(n >> i) & 1可以获取第i位的二进制值,每次n右移一位,可以获取一位的二进制值,右移32次,n变成0,循环终止。
#include<iostream>
using namespace std;int Count(size_t value)
{int count = 0;while(value){value &= (value-1); //表达式只跟1的个数有关系,跟1所在的位置无关count++;}return count;
}int main()
{size_t value; //unsigned intint one_count = 0;while(cin >> value){one_count = Count(value);cout<<one_count<<endl;}return 0;
}
手套
手套
解题思路:对于非0递增序列a1,a2…an,要想最终取值覆盖每一个种类 n = sum(a1…an) - a1 + 1(也就是总数减去最小值之后加一) 所以对于左右手手套颜色都有数量的序列,想要覆盖每一种颜色,则最小数量leftsum = 左边数量和 - 左边最小值 + 1, rightsum = 右边数量和 - 右边的最小值 + 1。而对于有0存在的,则需要做累加,保证覆盖每一种颜色。
class Gloves {public:int findMinimum(int n, vector<int> left, vector<int> right) {int left_sum = 0, left_min = INT_MAX;int right_sum = 0, right_min = INT_MAX;int sum = 0;//遍历每一种颜色的左右手套序列for (int i = 0; i < n; i++) {//对于有0存在的颜色手套,累加if (left[i]*right[i] == 0)sum += left[i] + right[i];//对于左右手都有的颜色手套,执行累加-最小值+1//找到最小值和总数else {left_sum += left[i];right_sum += right[i];left_min = min(left_min, left[i]);right_min = min(right_min, right[i]);}}//结果为有左右都有数量的手套序列的结果+有0存在的手套数+最后再加一肯定就能保证了return sum + min(left_sum - left_min + 1, right_sum - right_min + 1) + 1;}
};
相关文章:

【C/C++笔试练习】公有派生、构造函数内不执行多态、抽象类和纯虚函数、多态中的缺省值、虚函数的描述、纯虚函数的声明、查找输入整数二进制中1的个数、手套
文章目录 C/C笔试练习选择部分(1)公有派生(2)构造函数内不执行多态(3)抽象类和纯虚函数(4)多态中的缺省值(5)程序分析(6)重载和隐藏&a…...

Linux shell中的函数定义、传参和调用
Linux shell中的函数定义、传参和调用: 函数定义语法: [ function ] functionName [()] { } 示例: #!/bin/bash# get limit if [ $# -eq 1 ] && [ $1 -gt 0 ]; thenlimit$1echo -e "\nINFO: input limit is $limit" e…...

YoloV8改进策略:基于RevCol,可逆的柱状神经网络的完美迁移,YoloV8的上分利器
文章目录 摘要论文:《RevCol:可逆的柱状神经网络》1、简介2、方法2.1、Multi-LeVEl ReVERsible Unit2.2、可逆列架构2.2.1、MACRo设计2.2.2、MicRo 设计2.3、中间监督3、实验部分3.1、图像分类3.2、目标检测3.3、语义分割3.4、与SOTA基础模型的系统级比较3.5、更多分析实验&l…...

九章量子计算机:引领量子计算的新篇章
九章量子计算机:引领量子计算的新篇章 一、引言 随着科技的飞速发展,量子计算已成为全球科研领域的前沿议题。九章量子计算机作为中国自主研发的量子计算机,具有划时代的意义。本文将深入探讨九章量子计算机的原理、技术特点、应用前景等方面,带领读者领略量子计算的魅力…...

什么是vue的计算属性
Vue的计算属性是一种特殊的属性,它的值是通过对其他属性进行计算得到的。计算属性可以方便地对模型中的数据进行处理和转换,同时还具有缓存机制,只有在依赖的数据发生变化时才会重新计算值。这使得计算属性更加高效,并且可以减少重…...

Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等
目录 1 .zip后缀名: 1.1 zip指令 1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 1 .zip后缀名: 1.1 zip指令 语法:zip [namefile.zip] [namefile]... 功能:将目录或者文件压缩成zip格式 常用选项:…...

C语言——深入理解指针(4)
目录 1.回调函数 2. qsort 函数的使用 2.1 排序整型数据 2.2 排序结构体数据 3. qsort 函数的模拟实现 1.回调函数 回调函数就是通过一个函数指针调用的函数。 你把函数的地址作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调…...

Linux基础命令(超全面,建议收藏!)
一、Linux的目录结构 /,根目录是最顶级的目录了 Linux只有一个顶级目录:/ 路径描述的层次关系同样使用/来表示 /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt 二、Linux命令基础格式 无论是什么…...

LeetCode刷题---合并两个有序链表
个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏:http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的 我讲述…...

SQL Server 2008 使用concat报错
SQL Server 2008 使用concat报错 在 SQL Server中,CONCAT 函数是从 SQL Server 2012 版本开始引入的,所以在 SQL Server 2008 中使用 CONCAT 函数会导致错误。 如果你想要连接字符串,有几种替代方法可以考虑: 使用 运算符&…...

视频后期效果制作工具Mocha Pro 2022 Plugins mac中文版软件介绍
Mocha Pro 2022 mac是一款专业的三维摄像机反求摩卡跟踪插件,同时也是一款视频后期效果制作工具,Mocha Pro 2022下载能够给数字媒体艺术家提供强大的、直观的和创新的追踪解决方案用简化的界面、加速的工作流程以及轻松追踪和操作镜头的强大性࿰…...

人工智能时代:AIGC的横空出世
🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…...

基于ChatGPT等大模型快速爬虫提取网页内容
本文将介绍一种基于ChatGPT等大模型快速爬虫提取网页内容的方法。传统的爬虫方法需要花费较大精力分析页面的html元素,而这种方法只需要两步就可以完成。下面将从使用步骤、方法扩展和示例程序三部分进行介绍。RdFast智能创作机器人小程序预计本周2023-11-30之前集成…...

JavaScript WebAPI(三)(详解)
这次介绍一下webAPI中的一些知识: 回调函数 回调函数是指 如果将函数A做为参数传递给函数B时,我们称函数A为回调函数 例如: // 立即执行函数中传递的函数是一个回调函数 (function(){ console.log("我是回调函数") })(); // …...

LeetCode哈希表:最长连续序列
LeetCode哈希表:最长连续序列 题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入&…...

SpringBoot+redis实现接口防刷
写一个RedisService,实现获取Redis 的set、get、incr(相当于计数器) 写inferface注解类 做一个拦截器,因为要先于控制器判断 将拦截器注入Springboot 文章目录 目录 文章目录 前言 一、引入依赖 二、使用步骤 2.1 RedisServic…...

5G承载网和大客户承载的演进
文章目录 移动4/5G承载网联通和电信4/5G承载网M-OTN(Metro-optimized OTN),城域型光传送网PeOTN(packet enhanced optical transport network),分组增强型OTN板卡增强型PeOTN集中交叉型PeOTN VC-OTN&#x…...

智慧工地一体化解决方案(里程碑管理)源码
智慧工地为管理人员提供及时、高效、优质的远程管理服务,提升安全管理水平,确保施工安全提高施工质量。实现对人、机、料、法、环的全方位实时监控,变被动“监督”为主动“监控”。 一、建设背景 施工现场有数量多、分布广,总部统…...

熬夜会秃头——beta冲刺Day2
这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day2团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…...

【linux】信号——信号保存+信号处理
信号保存信号处理 1.信号保存1.1信号其他相关概念1.2信号在内核中的表示 2.信号处理2.1信号的捕捉流程2.2sigset_t2.3信号集操作函数2.4实操2.5捕捉信号的方法 3.可重入函数4.volatile5.SIGCHLD信号 自我名言:只有努力,才能追逐梦想,只有努力…...

雷军:我的程序人生路
今天有朋友发给我一篇我在20年前在BBS上写的帖子。那还是1996年,我们通过电话线拨号连接到西点BBS上飙帖子玩的年代。那是一个互联网混沌初开的年代,那是一个BBS和Email几乎主宰了全部互联网的年代,那是一个青春的理想和热血沸腾的年代。 我…...

Linux 磁盘分区处理
最近实施过程中遇到客户提供给我们的服务器操作系统和Docke容器环境都已经安装完成,但磁盘的分区没有进行整理好。磁盘总共270G,系统安装分配了60G,剩余未创建分配需要处理。由于分区情况每家不一样,但大致流程都是相同的…...

利用ogr2ogr从PostGIS中导出/导入Tab/Dxf/Geojson等格式数据
ogr2ogr Demo Command 先查看下当前gdal支持的全部格式,部分gdal版本可能不支持PostGIS。 如出现PostgreSQL表名支持。 #全部支持的格式 ogrinfo --formats | sort #AVCBin -vector- (rov): Arc/Info Binary Coverage #AVCE00 -vector- (rov): Arc/Info E00 (ASC…...

【深度优先】LeetCode1932:合并多棵二叉搜索树
作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你 n 个 二叉搜索树的根节点 ,存储在数组 trees 中(下标从 0 开始),对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 ࿰…...

monorepo多项目管理主流实现方式:1.learn + yarn/npm workspace 2.pnpm
npm域级包 随着npm包越来越多,而且包名也只能是唯一的,如果一个名字被别人占了,那你就不能再使用这个名字;假设我想要开发一个utils包,但是张三已经发布了一个utils包,那我的包名就不能叫utils了ÿ…...

【斗罗二】暗杀霍雨浩行动,马小桃霸气回击,江楠楠首秀武魂兔兔
Hello,小伙伴们,我是拾荒君。 《斗罗大陆Ⅱ绝世唐门》第25集更新了!和小伙伴们一样,一更新,拾荒君就急不可待地观看这一集。故事情节高潮迭起,尤其是霍雨浩与王冬面对六名杀手的惊险场景,真是让人心跳加速…...

[ 蓝桥杯Web真题 ]-年度明星项目
目录 引入 介绍 准备 目标 效果 规定 思路 知识补充 解答参考 引入 hello,大家好!我注意到了之前发的一篇蓝桥杯Web应用开发的文章是关注度最高的,可能大部分关注我的小伙伴对蓝桥杯Web应用开发比较感兴趣,或者想要参加…...

Maven终端打包时报Unknown lifecycle phase “.test.skip=true“
错误实例代码 mvn clean package -Dmaven.test.skiptrue 再windows的cmd窗口进行项目打包,需要将参数用英文符号包裹起来“ ” 【正确的实例】:mvn clean package ’-Dmaven.test.skiptrue‘ PS D:\BaiduNetdiskDownload\qian\Springboot-Vue\bi…...

Linux MIPI 调试中常见的问题
一、概述 做嵌入式工作的小伙伴知道,有时候程序编写没有调试过程中费时,之间笔记里有 MIPI 摄像头驱动开发的过程,有需要的小伙伴可以参考:Linux RN6752 驱动编写。而我也是第一次琢磨 MIPI 协议,其中有很多不明白的地…...

使用极限网关助力 ES 集群无缝升级、迁移上/下云
在工作中大家可能会遇到以下这些场景: 自建 ES 集群需要平滑迁移到 XX 云;从 XX 云将 ES 集群迁移到自建机房;ES 集群进行跨版本升级,同时保留回退能力; 这些场景往往都还有个共同的需求:迁移过程要保证业…...