【C/C++笔试练习】内联函数、函数重载、调用构造函数的次数、赋值运算符重载、静态成员函数、析构函数、模板定义、最近公共祖先、求最大连续bit数

文章目录

  • C/C++笔试练习
  • 选择部分
    • (1)内联函数
    • (2)函数重载
    • (3)调用构造函数的次数
    • (4)赋值运算符重载
    • (5)静态成员函数
    • (6)调用构造函数的次数
    • (7)析构函数
    • (8)程序分析
    • (9)构造函数和析构函数
    • (10)模板定义
  • 编程题 day11
    • 最近公共祖先
    • 求最大连续bit数

C/C++笔试练习

选择部分

(1)内联函数

  关于内联函数说法错误的是()

  A. 不是任何一个函数都可定义成内联函数
  B. 内联函数的函数体内不能含有复杂的结构控制语句
  C. 递归函数可以被用来作为内联函数
  D. 内联函数一般适合于只有1~5行语句的小函数

  答案:C

  一般符合符合特定条件(如函数体内没有循环、递归)的函数才能被定义为内联函数。 因为内联函数的目的是通过将函数调用替换为函数体来减少函数调用的开销,如果函数体内包含复杂的控制结构,这种替换的效果可能会被削弱。

  内联函数只是一个给编译器的建议,最后内联是否实现,还需要看编译器是否会将其优化。一般内联函数一般适合于只有1~5行语句的小函数。这是因为内联函数的目的是减少函数调用的开销,而小函数体量小,更容易被编译器优化为内联形式。所以选项C是错误的。

  

(2)函数重载

  以下不是double compare(int,int)的重载函数的是()

  A. int compare(double,double)
  B. double compare(double,double)
  C. double compare(double,int)
  D. int compare(int,int)

  答案:D

  函数重载概念:

  函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同 ,常用来处理实现功能类似数据类型不同的问题。

  原函数double compare(int,int)的意思是接受两个整数作为参数,并返回一个double类型的数。

  A. int compare(double,double) - 这个函数接受两个double类型作为参数,并返回一个整数。这符合函数重载的条件,因为参数类型不同

  B. double compare(double,double) - 这个函数接受两个double类型作为参数,并返回一个double类型。这也符合函数重载的条件,虽然参数类型和原函数相同,但是参数类型不同,和第一个构成的原理一样。

  C. double compare(double,int) - 这个函数接受一个double类型和一个int类型作为参数,并返回一个double类型。这也符合函数重载的条件,因为参数类型不同

  D. int compare(int,int) - 这个函数接受两个int类型作为参数,并返回一个整数。虽然返回类型不同。但是返回类型不能作为函数重载的条件,因此这个选项不能被视为对原始函数的重载。所以选择D。

  

(3)调用构造函数的次数

  假定有类AB,有相应的构造函数定义,能正确执行语句,请问执行完此语句后共调用该类的构造函数次数为___

AB a(4),b(5),c[3],*p[2]={&a,&b}

  A. 5
  B. 4
  C. 3
  D. 9

  答案:A

  在执行AB a(4),b(5),c[3],*p[2]={&a,&b}时,首先创建了a和b两个对象,调用AB类的构造函数2次;然后创建了c数组,调用AB类的构造函数3次;最后创建了p数组,将a和b的地址赋给了p数组的两个元素,因为此时的p数组中存的值是指针类型,所以不会再次调用AB类的构造函数。因此,AB类的构造函数被调用了2+3=5次。所以答案为A。

  

(4)赋值运算符重载

  下列关于赋值运算符“=”重载的叙述中,正确的是

  A. 赋值运算符只能作为类的成员函数重载
  B. 默认的赋值运算符实现了“深层复制”功能
  C. 重载的赋值运算符函数有两个本类对象作为形参
  D. 如果己经定义了复制拷贝构造函数,就不能重载赋值运算符

  答案:A

  A. 赋值运算符只能作为类的成员函数重载。在C++中,赋值运算符“=”只能作为类的成员函数重载。通过将它重载为类的成员函数,我们可以控制类的对象之间的赋值行为。

  B. 默认的赋值运算符实现的是“浅层复制”,它只复制对象的值,而不会复制对象内部的指针或引用。所以默认的赋值运算符无法实现“深层复制”功能。

  C. 重载的赋值运算符函数应该只有一个本类对象作为形参,该函数将返回本类对象的引用。

  D. 如果已经定义了复制拷贝构造函数,就不能重载赋值运算符。这是不正确的。实际上,我们可以同时定义复制拷贝构造函数和重载赋值运算符。这两个操作是不同的,它们各自处理不同的情况。所以答案是A。

  

(5)静态成员函数

  下列有关静态成员函数的描述中,正确的是:

  A. 静态数据成员(非const类型)可以在类体内初始化
  B. 静态数据成员不可以被类对象调用
  C. 静态数据成员不受private控制符作用
  D. 静态数据成员可以直接用类名调用

  答案:D

  静态成员变量的概念:

  所有对象共享,并不属于具体的某个对象,静态成员变量需要在类中声明然后需要在类外单独进行定义,一定不能在构造函数初始化列表的位置初始化。

  在类外访问静态成员变量的时候可以使用: 对象.静态成员变量 或 类名::静态成员变量。

// 通过类名直接访问静态成员变量  
int MyClass::staticVar;  
// 通过对象名访问静态成员变量  
MyClass obj;  
int var = obj.staticVar;

  A.静态数据成员需要在类体外进行初始化,不能在类体内进行初始化。 静态数据成员(非const类型)不可以在类体内初始化。

  B. 静态成员函数可以通过类名或对象名调用, 所以静态数据成员可以通过合适的方法被类对象调用。

  C. 静态数据成员可以被声明为private、protected或public,并同样受到相应的访问控制。

  D. 静态成员函数可以通过类名或对象名调用, 不需要创建类的对象。所以答案是D。

  

(6)调用构造函数的次数

  若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是()

  A. 2
  B. 3
  C. 0
  D. 1

  答案:C

  注意该语句"PAT(ad)[3];",创建的是一个数组指针,是指向存放了3个PAT类型对象的数组的指针,类型还是指针,所有没有创建对象就没有调用构造函数。因此,答案为C。

  

(7)析构函数

  下面对析构函数的正确描述是()

  A. 系统不能提供默认的析构函数
  B. 析构函数必须由用户定义
  C. 析构函数没有参数
  D. 析构函数可以设置默认参数

  答案:C

  析构函数是一个特殊的成员函数,它用于释放对象使用的资源。系统提供了默认的析构函数,也可以由用户定义。析构函数没有参数,也不可以设置默认参数。 因此,选项C是正确的描述。

  

(8)程序分析

关于以下代码,哪个说法是正确的()

void myClass::foo(){
	delete this;
}
..
void func(){
	myClass *a = new myClass();
	a->foo();
}

  A. 它会引起栈溢出
  B. 都不正确
  C. 它不能编译
  D. 它会引起段错误

  答案:B

  该代码是先创建了一个对象myClass,然后用指向这个对象的指针a,去调用了这个类中的foo函数,这个函数是一个删除操作,可能缺失了部分函数体,但是没有语法问题。

在这里插入图片描述

  

(9)构造函数和析构函数

  哪种说法是错误的()?

  A. 构造函数可以有形参
  B. 析构函数可以有形参
  C. 构造函数无任何函数类型
  D. 析构函数无任何函数类型

  答案:B

  在C++中,构造函数和析构函数都是特殊的成员函数,它们分别在对象创建和销毁时调用。构造函数可以有形参,例如拷贝构造函数。

  析构函数不能有参数。它的作用是清理对象占用的资源,不需要传递任何参数。构造函数和析构函数都没有任何函数返回类型, 所以答案是B。

  

(10)模板定义

  有如下模板定义,在下列对fun的调用中,错误的是()

template <class T>
T fun(T x,T y){
	return x*x+y*y;
}

  A. fun(1, 2)
  B. fun(1.0, 2)
  C. fun(2.0, 1.0)
  D. fun< float >(1, 2.0)

  答案:B

  函数模版的实例化:

  fun的隐式实例化, 传给fun的两个形参类型必须一致,如fun(int,int),fun(double,double)

  fun的显示实例化, 两个参数可以不同,但是必须可以发生隐式实例化,加上转换后的类型即可,如 fun< float >(1, 2.0)

            

编程题 day11

最近公共祖先

最近公共祖先

在这里插入图片描述

  根据上述树中子节点与父节点之间的关系为root = child / 2,所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先 比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先。

class LCA {
  public:
    int getLCA(int a, int b) 
    {
        while (a != b)
         {
            if (a > b)
                a /= 2;
            else
                b /= 2;
        }
        return a;
    }
};

  

求最大连续bit数

求最大连续bit数

在这里插入图片描述
  根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计数。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    while (cin >> n) 
    {
        int count = 0, maxCount = 0;
        // n右移32次就变为0
        while (n) 
        {
            //获取当前位的二进制值
            if (n & 1) 
            {
                //如果1的值连续,计数累加,并且跟新最大计数
                ++count;
                maxCount = max(count, maxCount);
            } 
            else 
            {
            //如果1的值不连续,重新累加
                count = 0;
            }
            //右移一次,为获取下一位二进制值做准备
            n = n >> 1;
        }
        cout << maxCount << endl;
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序和H5之间互相跳转、互相传值

微信小程序和内嵌 H5 之间来回跳转&#xff0c;来回交互。 1 微信小程序跳转 H5 1.2. web-view 微信小程序官方提供了 web-view 组件来实现微信小程序跳转到 H5 页面&#xff0c;实现的方式也很简单&#xff0c;具体实现方式如下&#xff1a; 1、新建一个页面用来单独存放 we…

网页推理游戏

目录 python challenge &#xff08;0&#xff09; &#xff08;1&#xff09; &#xff08;2&#xff09; The Riddle &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; &#xff08;4&#xff09; Nazo &#xff08;1&#xff09;…

宋浩高等数学笔记(三)微分中值定理

首先是考研大纲包含的内容&#xff1a; 1.理解并会用罗尔(Rolle)定理、拉格朗日(Lagrange)中值定理和泰勒(Taylor)定理&#xff0c;了解并会用柯西(Cauchy)中值定理. 2.掌握用洛必达法则求未定式极限的方法. 3.理解函数的极值概念&#xff0c;掌握用导数判断函数的单调性和求函…

事务AOP

1事务&#xff1a; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数 据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 1.1实现&#xff1a;Transactional注解 Transact…

基于SSM的网络书店商城

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

电脑想要微信多开——打开多个微信的必胜法宝!

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.11.11 Last edited: 2023.11.11 导读&#xff1a;在生活当中经常遇到工作和生活相撞的事情&#xff0c;导致在处理私人的事情同时不得不处理…

分销cps外卖券电影票小程序开发

电影票外卖劵分销CPS小程序开发作 我们致力于为消费者提供优质、便捷的外卖服务。现在&#xff0c;我们推出全新的电影票外卖劵分销CPS小程序&#xff0c;以及更多具有深度和专业度的功能和服务&#xff0c;以满足消费者更高的生活服务需求。 首先&#xff0c;我们的分销模式…

服务日志性能调优,由log引出一系列的事故

只有被线上服务问题毒打过的人才明白日志有多重要&#xff01; 谁赞成&#xff0c;谁反对&#xff1f;如果你深有同感&#xff0c;那恭喜你是个社会人了&#xff1a;&#xff09; 日志对程序的重要性不言而喻&#xff0c;轻巧、简单、无需费脑&#xff0c;程序代码中随处可见…

Python 使用tkinter复刻Windows记事本UI和菜单功能(一)

下一篇&#xff1a;Python 使用tkinter复刻Windows记事本UI和菜单&#xff08;二&#xff09;-CSDN博客 介绍&#xff1a; Windows操作系统中自带了一款记事本应用程序&#xff0c;通常用于记录文字信息&#xff0c;具有简单文本编辑功能。Windows的记事本可以新建、打开、保…

探索云世界的无限可能

文章目录 每日一句正能量前言云计算的定义和现状云计算能做什么&#xff1f;云计算市场的新特征需求方向&#xff1a;云计算的基础服务已经稳固&#xff0c;行业解决方案是新的发力点模式方向&#xff1a;分布式云模式方向&#xff1a;边缘计算是一朵新的云技术方向&#xff1a…

SQL 聚合函数

前言 SQL中的聚合函数是对一组值执行计算&#xff0c;并返回单个值的函数。 常用的聚合函数有&#xff1a; 函数作用AVG&#xff08;&#xff09;求平均值MAX&#xff08;&#xff09;求最大值MIN&#xff08;&#xff09;求最小值SUM&#xff08;&#xff09;求和COUNT&…

若依vue-初步下载使用

若依框架可以满足大部分的后台管理系统的开发,使用频率也是比较高的,所以这里讲一下如何使用若依框架 若依框架代码克隆 首先去若依官网 http://www.ruoyi.vip/ 这里演示的是若依-vue版本的使用 我们点击下载 会跳转到码云仓库 或者直接点击下面的链接去码云仓库 https://git…

第一章《补基础:不怕学不懂微积分》笔记

微积分包含众多知识点&#xff0c;例如极限概念、求导公式、乘积法则、链式法则、隐函数求导、 积分中值定理、泰勒公式等。其中&#xff0c;研究导数、微分及其应用的部分一般称为微分学&#xff0c;研究不定积分、定积分及其应用的部分一般称为积分学。微分学和积分学统称为微…

动态规划学习——多状态dp(打家劫舍问题)

一&#xff0c;打家劫舍I 题目&#xff1a; 一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自…

Gold-YOLO最新YOLO系列模型

论文地址https://arxiv.org/pdf/2309.11331.pdf 代码地址https://github.com/huawei-noah/Efficient-Computing 目录 01论文介绍 01摘要 02模型训练过程 01安装环境 02修改train中参数 01修改--data-path参数 02修改--conf-file参数 03其他参数设置 03训练 04出现问…

CA 陪你看 Ignite | 聚焦 Microsoft Ignite 2023

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

超级有效的12个远程团队管理技巧

前言 随着远程办公的兴起&#xff0c;虚拟管理团队已成为新常态。尽管混合和远程工作正在成为新常态&#xff0c;但管理远程团队也面临着一系列挑战。本文我们将为您提供 12个技巧&#xff0c;帮助您成功管理远程团队并改善协作。此外&#xff0c;我们将讨论定期接触点的重要性…

Python与ArcGIS系列(一)ArcGIS中使用Python

目录 0 简述1 arcgis中的python窗口2 开始编写代码 0 简述 按照惯例&#xff0c;作为本系列专栏的第一篇&#xff0c;先简单地介绍下本系列文章的内容&#xff1a;通过python语言创建arcgis环境脚本、将脚本以工具箱形式存放在arcgis中、通过脚本自动执行地理处理、数据修复、…

VScode配置C/C++环境

文章目录 一、下载MinGW二、配置环境变量三、VScode配置四、验证 一、下载MinGW MinGW官网 划到最下面找 二、配置环境变量 解压后放到自己想放的目录下 右键 此电脑–>属性–>高级系统设置—>环境变量–> 在cmd命令行检测&#xff0c;出现如下界面&#xff1a;…

【星海随笔】SDN neutron (二) Neutron-plugin(ML2)

Neutron架构之Neutron-plugin Core-plugin(ML2)篇 Neutron-server接收两种请求&#xff1a; REST API请求&#xff1a;接收REST API请求&#xff0c;并将REST API分发到对应的Plugin&#xff08;L3RouterPlugin&#xff09;。 RPC请求&#xff1a;接收Plugin agent请求&#…