C/C++常见面试题(二)

接前面C/C++常见面试题(一),继续巩固

目录

1 sizeof和strlen的区别

2 宏定义的陷进

3 不使用sizeof计算出类型或者变量所占的内存的字节数

4 给定一个数判断是否其是2的N次幂

 5 C/C++打印所在文件、行号、函数、日期,时间、遵循的标准   

6 简单说一下重载和重写的区别

7 简单讲一下虚函数和纯虚函数


1 sizeof和strlen的区别

        回答这个问题从以下三个方面:

        a. sizeof是关键字、运算符,而strlen是函数

        b. strlen 只能使用char * 做参数,必须以“\0”结尾,一般用于计算字符串的长度,不包括"\0"的所占的空间;sizeof可以用类型或者变量做参数,一般用于计算类型或者变量所占的内存的字节数,因此在计算字符串长度的时候,会包含"\0"所占的内存空间大小。

        c. sizeof 是关键字在编译的时候已经计算好了,strlen是在运行程序的时候进行计算的

2 宏定义的陷进

#include <stdio.h>

#define VHU(x)  x* x*x

int main()

{

        int a = 4;

        printf("%d \n",VHU(a+1));

        return 0;

}        

如上的一个宏定义:

VHU(a+1) = a + 1 * a + 1 * a + 1 = 3*a + 1 = 13

切记宏定义的本质只是简单的替换,因此对于宏定义的操作,一般要求加括号,比如上述的宏定义,要计算x的三次方的话,应该写成 VHU(x) (x)*(x)*(x)

3 不使用sizeof计算出类型或者变量所占的内存的字节数

        利用0地址的转换

        #define SIZEOF(T) ((size_t)((typeof(T)*)0 + 1))

4 给定一个数判断是否其是2的N次幂

        利用2^{n}2^{n}-1相与得到值为0,可以判断出

        仅仅只需要判断 n & (n-1) 是否为0,为0就是2的N次幂,特殊处理一下n <= 0的情况即可

 代码如下:

#include <stdio.h>
#include <stdbool.h>bool Is2_n(int n)
{   if (n < 0){printf("输入的值是: %d 不在范围内,应该大于0 Fail Exit\n",n);exit(0);}if (n == 0){return false;}if ((n & (n-1)) == 0){return true;}else{return false;}}int main(int argc,char *argv[])
{if (Is2_n(8)){printf("是2的N次幂\n");}else{printf("不是2的N次幂\n");}return 0;
}

 5 C/C++打印所在文件、行号、函数、日期,时间、遵循的标准   

        ANSIC标准定义了可供C语言使用的预定义宏:
        __LINE__ : 在源代码中插入当前源代码行号
        __FILE__ : 在源代码中插入当前源代码文件名                                                            __FUNCTION__:在源代码中插入当前源代码所在函数
        __DATE__ : 在源代码中插入当前编译日期
        __TIME__ : 在源代码中插入当前编译时间                                                                                       __STDC__:在函数中查看C/C++遵循的标准,ANSI C标准 是一个非0值,一般的C/C++都遵循

                        ANSI 标准

6 简单说一下重载和重写的区别

        回答一:

        a. 重载和重写是实现C++多态的两种方式,都可以满足对于不同的对象收到相同的消息产生

                不同的行为这一多态特性。重写的实现是利用虚函数实现的。重载是利用相同作用域的

                同名函数的不同的参数列表(参数个数、参数类型)实现的。

        b. 虚函数是基类希望派生类重新定义的函数,派生类重新定义基类虚函数的做法叫做覆盖

        (重写);重载就在允许在相同作用域中存在多个同名的函数,这些函数的参数表不同。

        重载的概念不属于面向对象编程,编译器根据函数不同的形参表对同名函数的名称做修

        饰,然后这些同名函数就成了不同的函数。

        c. 重载的确定是在编译时确定,是静态的,属于编译时多态;虚函数则是在运行时动态确定,

                属于运行时多态。

        回答二:

        重载:

                (1)发生在同一个类中;
                (2)相同的方法名;
                (3)参数列表不同;
                (4)不看返回值,如果出现了只有返回值不同的“重载”,是错的;
        重写:

                (1)发生在子类与父类中;
                (2)相同的方法名;
                (3)相同的参数列表;
                (4)返回值相同 或者 子类方法的返回值是父类方法返回值类型的子类;
                (5)访问修饰符相同 或者 子类方法的修饰符范围 大于 父类;
                (6)抛出的异常相同 或者 子类方法抛出的异常 小于父类;

        
        方法的重写(Overriding)和重载(Overloading)是多态性的不同表现,重写是父类与子类之间

        多 态性的一种表现,重载可以理解成多态的具体表现形式。

        方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次

        序不同,则称为方法的重载(Overloading)。
        方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一

        样的方法,就称为重写(Overriding)。
        方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

具体对比分析
具体对比分析

7 简单讲一下虚函数和纯虚函数

        虚函数:

        在类的成员函数前加virtual关键字。

        虚函数是实现多态的基础。一旦基类定义了虚函数,该基类的派生类中的同名函数也自动称

        为虚函数。

        虚函数的重写:派生类中有一个跟基类的完全相同的虚函数,我们就称子类的虚函数重写了

        基类的虚函数。

        “完全相同”是指:函数名、参数、返回值都相同。另外,虚函数的重写也叫做虚函数的覆盖。

        纯虚函数

        在虚函数的后面写上 = 0,则这个函数为纯虚函数。(纯虚函数没有函数体)

        包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也

        不能实例化出对象

        只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚

        函数更体现了接口继承。        

        子类和父类的实例化关系:

        子类可以实例化成父类,父类不能实例化成子类,因为子类可能重写了父类,子类的范畴是

        大于父类的,大到小是可以的,小到大是不行的。

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

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

相关文章

Android P 9.0 增加以太网静态IP功能

效果图 一、Settings添加以太网的配置&#xff1a; 1、vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\network_and_internet.xml <com.android.settingslib.RestrictedPreferenceandroid:key"ethernet_settings"android:title"string/et…

TailwindCSS 配置可视化检查器

问题 TailwindCSS 框架为我们提供了大量默认的类和属性&#xff0c;而且开发者也能够自定义类和配置。 对于初学者来说&#xff0c;这些配置其实是比较复杂的&#xff0c;这也是tailwindcss最大的入手成本&#xff0c;开发者的记忆负担和心智负担也都比较大。 有没有办法能够…

C语言动态内存经典笔试题分析

C语言动态内存经典笔试题分析 文章目录 C语言动态内存经典笔试题分析1. 题目一2. 题目二3. 题目三4. 题目四 1. 题目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…

html通过CDN引入Vue使用Vuex以及Computed、Watch监听

html通过CDN引入Vue使用Vuex以及Computed、Watch监听 近期遇到个需求&#xff0c;就是需要在.net MVC的项目中&#xff0c;对已有的项目的首页进行优化&#xff0c;也就是写原生html和js。但是咱是一个写前端的&#xff0c;写html还可以&#xff0c;.net的话&#xff0c;开发也…

309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化边界条件4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中&#xff0c;我们将要详细介绍一下Leetcode中买卖股票的最佳时机含冷冻期相关的内容&#xff0c;本题采用动态规划的思想解决 一、…

mybatis多表映射-对多关联

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

基于Pytorch框架深度学的垃圾分类智能识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 垃圾分类智能识别系统是一种基于深度学习技术的智能系统&#xff0c;用于对垃圾进行分类和识别。它使用Pytorch框架…

php实现个性化域名(短网址)和个性化登录模版的解决方案

在PHP中&#xff0c;个性化域名通常指的是根据用户或业务需求动态生成具有特定规律的子域名。实现个性化域名的方法主要依赖于服务器配置和路由规则。下面是一些基本的步骤和考虑因素&#xff0c;以帮助你了解如何个性化域名&#xff0c;并了解这样做的好处。 如何实现个性化域…

XML学习及应用

介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 1.XML基础知识 1…

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值 Bundle ID这个就不说了&#xff0c;都知道是啥&#xff0c;主要说公钥信息和SHA-1值的获取 打开钥匙串访问&#xff0c;找到当前需要备案App的dis证书&#xff0c;如下&#xff1a; #####右键点击显示简介 #####可以看…

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间&#xff1f; 地址空间是如何设计的&#xff1f; 为什么要有地址空间&#xff1f; 程序地址空间排布图 在32位下&#xff0c;一个进程的地址空间&#xff0c;取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

一、本文介绍 本文给大家带来的改进机制是Slim-neck提出的Neck部分&#xff0c;Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中&#xff0c;neck是连接主干网络&#xff08;backbone&#xff09;和头部网络&#xff08;head&#xff09;的部分&…