【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;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开箱即用】前后端同时开源!周末和AI用Go语言共同研发了一款笔记留言小程序!

大家好&#xff0c;我是豆小匠。 真的是当你在怀疑AI会不会取代人类的时候&#xff0c;别人已经用AI工具加速几倍的生产速度了… 周末体验了和AI共同开发的感受&#xff0c;小项目真的可以一人全干了… 本次实验使用的AI工具有两个&#xff1a;1. GitHub Copilot&#xff08;…

前端文本省略号后面添加复制文字

前端文本省略号后面添加复制文字 1、效果图 2、代码展示 <div class"link-content-wrap" click"copyLinkText"><div class"link-content">{{ shareResult.url || }} </div><span class"show-ellipsis" click&…

(五)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

深入浅出强化学习

目录 一、强化学习的概念 二、强化学习的特点 三、强化学习的训练过程 一、强化学习的概念 强化学习是一种机器学习方法&#xff0c;旨在教会算法如何通过与环境的交互来进行学习和决策。与传统的监督学习和无监督学习不同&#xff0c;强化学习侧重于学习与奖励和惩罚&#…

详解原生Spring框架下的方法切入点表达式

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

春秋云镜 CVE-2022-30887

春秋云镜 CVE-2022-30887 多语言药房管理系统 (MPMS) 靶场介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0c;并根据到期…

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…

钢铁ERP系统有哪些?钢铁ERP软件哪家好用

不同的钢铁材料有差异化的产成品&#xff0c;而这些成品又有多元化的营销策略和制造工艺&#xff0c;每道生产工艺存在差异化的管理方式与策略&#xff0c;而不同的销售策略对应多样化的价格机制等&#xff0c;繁多的业务数据采集和分析工作量较大。 近些年制造工艺的变革也促…

精通Git(第2版)读书笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言第 1章 入门 11.1 关于版本控制 11.1.1 本地版本控制系统 1 第 2章 Git基础 132.1 获取Git仓库 132.1.1 在现有中初始化Git仓库 132.1.2 克隆现有仓库 14 2.2 在…

Python函数的高级用法

Python 的函数是“一等公民”&#xff0c;因此函数本身也是一个对象&#xff0c;函数既可用于赋值&#xff0c;也可用作其他函数的参数&#xff0c;还可作为其他函数的返回值。 使用函数变量 Python 的函数也是一种值&#xff1a;所有函数都是 function 对象&#xff0c;这意…

人工智能学习5(特征抽取)

编译环境&#xff1a;PyCharm 文章目录 编译环境&#xff1a;PyCharm 特征抽取无监督特征抽取(之PCA)代码实现鸢尾花数据集无监督特征抽取 有监督特征抽取(之LDA)代码实现,生成自己的数据集并进行有监督特征抽取(LDA)生成自己的数据集PCA降维和LDA降维对比 代码实现LDA降维对鸢…

shareMouse 使用中遇到的问题

一、shareMouse 使用中遇到的问题 1、鼠标不能移动到另一个显示器 明明是两个显示器&#xff0c;但是 只显示一个&#xff0c;鼠标也不能移到另一个显示器上 后来&#xff0c; 设置了 wrap mouse pointer around display就好了&#xff0c;虽然还是显示一个显示器&#xff0c…

SmartSoftHelp8,API专业测试工具

API专业测试工具 post get put 专业接口测试工具 提交数据接口集成 返回数据接口集成 方便快捷 中文显示 下载地址&#xff1a; https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库 1. 专门用来实现一个SPA单页面应用 2 .基于vue的项目基本都会用到此库 SPA的理解 1) 单页Web应用&#xff08;single page web application&#xff0c;SPA&#xff09; 2) 整个应用只有一个完整的页面 3) 点击页面中的链接不会刷新页面, 本…

Java包(package)

1、概念 为了更好的组织类&#xff0c;用于区别类名的命名空间&#xff0c;其实就是基于工程的一个文件路径&#xff0c;如&#xff1a; 2、作用 三个作用&#xff1a; 1&#xff09;区分相同名称的类。 2&#xff09;能够较好地管理大量的类。 3&#xff09;控制访问范围。 在…

独家揭秘:卢松松拍摄视频背后的创作过程

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 一条视频刚刚发几分钟&#xff0c;有个粉丝就过来评论说&#xff1a; 抛开广告性&#xff0c;越来越有感觉了。 于是今天的这篇文章就来了&#xff0c;也顺便给大家分享下近期我拍视频、编辑视频的…

五年自动化测试,终于进字节跳动了,年薪30w其实也并非触不可及

一些碎碎念 什么都做了&#xff0c;和什么都没做其实是一样的&#xff0c;走出“瞎忙活”的安乐窝&#xff0c;才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没…

最新发布 Spring Boot 3.2.0 新特性和改进

一、Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这个框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 以下是Spring Boot的一些主要特点&#xf…

也可Adobe Animate

Animate CC 由原Adobe Flash Professional CC 更名得来&#xff0c;2015年12月2日&#xff1a;Adobe 宣布Flash Professional更名为Animate CC&#xff0c;在支持Flash SWF文件的基础上&#xff0c;加入了对HTML5的支持。并在2016年1月份发布新版本的时候&#xff0c;正式更名为…

记录一次vscode markdown的图片路径相关插件学习配置过程

插件及说明查找过程 csdn搜索markdown图片路径&#xff0c;找到关于这一款插件的回答。打开vscode拓展搜索Paste Image这款插件&#xff0c;看到下载量挺高的&#xff0c;应该不赖。 点击仓库,进入该插件开源的github仓库,查看README文件阅读说明. 淡然在Vscode 插件项目下的细…