c++ 笔试面试题 难题精选 持续更新

2023-05-16

//第一题   问下面的输出结果是 什么?
#include <stdio.h>
#include <iostream>
using namespace std;

class A
{
protected:
	int m_data;
public:
	A(int data = 0)
	{
		m_data = data;
	}
	int GetData()
	{
		return doGetData();
	}
	virtual int doGetData()
	{
		return m_data;
	}
};

class B: public A
{
protected : int m_data;
public: 
	B(int data = 1)
	{
		m_data  =  data;
	}
	int doGetData()
	{
		return m_data;
	}

};

class C : public B
{
protected :  int m_data;
public :
	C(int data = 2)
	{
		m_data = data;
	}
};
int main()
{
	C c(10);
	cout<<c.GetData() << endl;
	cout<<c.A::GetData()<<endl;
	cout<<c.B::GetData()<<endl;
	cout<<c.C::GetData()<<endl;

	cout<<c.doGetData()<<endl;
	cout<<c.A::doGetData()<<endl;
	cout<<c.B::doGetData()<<endl;
	cout<<c.C::doGetData()<<endl;
	
	return 0;
}             <span style="white-space:pre">																																																										</span><span style="font-family: Arial, Helvetica, sans-serif;">答:   </span><span style="font-family: Arial, Helvetica, sans-serif;">为   1   1   1   1  1  0  1  1  具体请参看程序员面试宝典 P134</span>



第二题  :

#include <stdio.h>
#include <iostream>
using namespace std;

class A
{
protected:
	int m_data;
public:
	A(int data = 0)
	{
		m_data = data;
	}
	int GetData()
	{
		return doGetData();
	}
	 int doGetData()
	{
		return m_data;
	}
};

class B: public A
{
protected : int m_data;
public: 
	B(int data = 1)
	{
		m_data  =  data;
	}
	int doGetData()
	{
		return m_data;
	}

};

class C : public B
{
protected :  int m_data;
public :
	C(int data = 2)
	{
		m_data = data;
	}
};
int main()
{
	C c(10);
	cout<<c.GetData() << endl;
	cout<<c.A::GetData()<<endl;
	cout<<c.B::GetData()<<endl;
	cout<<c.C::GetData()<<endl;

	cout<<c.doGetData()<<endl;
	cout<<c.A::doGetData()<<endl;
	cout<<c.B::doGetData()<<endl;
	cout<<c.C::doGetData()<<endl;
	//cout << A::doGetData()<<endl;  这种调用方式是错的
	return 0;
}

/*
结果为  0 0 0 0 1 0 1 1
*/

#include <stdio.h>
#include <iostream>
using namespace std;

class A
{
public:
	 static void doGetData()
	 {
		 printf("A");
	 }
};

class B: public A
{
public:
 void doGetData()
 {
     printf("B");
 }

};

  
int main()
{
    B  b ;
	b.doGetData();
	b.A::doGetData();
 
	return 0;
}

/*
结果为  B A
*/

第三题   请介绍回调函数  并说出其某个应用场景

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。

#include<stdio.h>

typedef int (*CallBackFun)(char *p); 

int Afun(char *p) 
{      
    printf("Afun 回调打印出字符%s!\n", p);
    return 0;
}

int Cfun(char *p)
 {    
    printf("Cfun 回调打印:%s, Nice to meet you!\n", p);
    return 0;
}

 
int call(char *p, int (*ptr)(char *)) // 执行回调函数  ptr就是回调函数
{ 
    printf("==============\n", p); 
    (*ptr)(p); 
	return 0;
}
 
int main() 
{    
    char *p = "hello";
    call(p, Afun);
    call(p, Cfun);
    return 0;
}
应用场景:
STL中的一个算法 sort排序中就存在一个回调函数    window api  OnTime的使用也需要一个回调函数


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

bool myFun(const int &a, const int&b)
{
	return a<b;
}
 
int main() 
{  
   int a[10] = {4, 3, 54, 23, 45, 23, 65, 34, 55, 55};
   sort(a, a+10, myFun);// myFun就是回调函数
   for(int i = 0; i < 10; i++)
	   printf("%d ", a[i] );
    return 0;
}


第四题   介绍   try{}catch{}finally{}机制


try 
{ 
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 
} 
catch 
{ 
//除非try里面执行代码发生了异常,否则这里的代码不会执行 
} 
finally 
{ 
//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally 
}   

第五题  常用的几种进程通信方式     介绍共享内存方式


管道  有名管道  消息队列   信号  信号量   套接字  共享内存

共享内存的介绍

<1>共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。
<2> 为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
<3>由于多个进程共享一段内存,因此也需要依靠某种同步机制。

共享内存的操作流程
<1>创建/打开共享内存
<2>映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
<3>撤销共享内存映射
<4>删除共享内存对象

第六题  互斥量和信号量的区别

1. 互斥量用于线程的互斥,信号量用于线程的同步。

这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源

2. 互斥量值只能为0/1,信号量值可以为非负整数。

3. 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。



第七题        小题 

1. const char *p = "Hello World";
char p[] = "Hello World";
分别求长度和所占用空间大小,有啥区别?
提示:求长度都可以用strlen(p),求占内存空间大小第一个不能用sizeof,第二个可以用sizeof
另外:第二个:strlen(p) = 11, sizeof(p) = 12



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 笔试面试题 难题精选 持续更新 的相关文章

  • 九、 惯性导航解算

    一 概述 惯性导航解算就是从上一时刻的导航信息推导本时刻的导航信息 xff0c 包括姿态 速度 位置 具体来讲 xff0c 就是构建当前时刻导航信息与上一时刻导航信息 运动输入 角速度 加速度 之间的关系 xff0c 确切地说 xff0c
  • 十二、构建一个基本的组合导航系统

    一 概述 在之前的文章里 xff0c 我们从一个基本的IMU模块开始讲起 xff08 二 xff09 xff0c 利用Allan方差分析方法 xff08 三 四 xff09 xff0c 得出了其误差参数 xff0c 又通过标定 xff08
  • 电脑键盘工作原理

    xfeff xfeff 随着IBM PC机的发展 xff0c 键盘也分为XT AT PS 2键盘以至于后来的USB键盘 PC系列机使用的键盘有83键 84键 101键 102键和104键等多种 XT和AT机的标准键盘分别为83键和84键 x
  • 十三、扩展一个组合导航系统

    感谢大神分享 xff1a https zhuanlan zhihu com p 156958777 一 概述 上一篇文章我们讲述了怎样搭建一个基本的组合导航系统 xff0c 它仅仅包括IMU做预测 GPS做观测 xff0c 而实际中 xff
  • 三、FSAS + Novatel接收机和相机时间同步、数据保存、解码等 细节说明

    一 器件说明 1 GNSS 接收机是 P ropak6 如下图所示 xff1a 具体得介绍 xff1a 1 https blog csdn net hltt3838 article details 110622732 2 二 NovAtel
  • Word 中出现公式不能编辑问题(兼容模式)

    当word中的公式不能编辑 xff0c 多数原因是由于word是处于兼容模式下 xff0c 这个时候就需要取消world的兼容模式 xff0c 具体步骤如下 xff1a 一 打开word文档 二 点击 word中的文件 出现如下结果 xff
  • 理论三、 MSCKF 数学基础

    感谢 xff1a 紫薯萝卜 https zhuanlan zhihu com p 76793847 1 数学定义 后续将进行MSCKF数学基础介绍 xff0c 先总结一下数据符号定义 坐标系定义 物理量定义 估计量定义 四元数定义 xff1
  • 算法改进5:开源算法Open VINS试用

    1 Open VINS简介 Open VINS是Huang Guoquan老师团队在2019年8月份开源的一套基于MSCKF的VINS算法 xff0c 黄老师曾是Tango项目的核心成员 xff0c 在MSCKF这块非常的权威 Github
  • MSCKF 公式推导

    看完这篇博客建议再看 xff1a http www xinliang zhong vip msckf notes 目录 一 简介 二 符号说明 三 状态向量 3 1 真实状态向量 true state 3 2 误差状态向量 error st
  • MSCKF 源码解析 一

    论文 xff1a https arxiv org abs 1712 00036 源码路径 https github com daniilidis group msckf mono 源码框架 上图展示了整个msckf源码框架 xff0c 每当
  • C++中 仿函数简单介绍

    仿函数 xff0c 顾名思义 xff0c 就是 仿造函数 的意思 xff0c 它并不是函数 xff0c 但是却有着类似于函数的行为 那么 xff0c 它到底是什么 xff1f 首先要说的是 xff1a 仿函数是泛型编程强大威力和纯粹抽象概念
  • GNSS/INS组合导航(八):INS/GPS组合导航

    INS GPS组合导航 对比INS与GPS导航方法 xff0c 二者都有其各自的优缺点 惯性导航系统INS是一种全自主的导航系统 xff0c 可以输出超过200Hz的高频信号 xff0c 并且具有较高的短期测量精度 除了提供位置与速度之外还
  • Word 中利用“多级列表“功能实现章节标题自动编号

    一 打开 多级列表 打开Word文档 xff0c 在 开始 选择多级列表 点击定义新的多级列表 xff1b 点击之后 xff0c 便可以得到下面的界面 xff1a 二 设置固定格式的 多级标题 假设我们需要下面的标题格式 xff0c 我们需
  • 端口映射怎么设置

    路由器端口映射的作用就是让互联网上的用户可以访问内网中的服务器 xff0c 内网的一台电脑要上因特网对外开放服务或接收数据 xff0c 都需要端口映射 端口映射分为动态和静态 动态端口映射 xff1a 内网中的一台电脑要访问某网站 xff0
  • 解决Word中出现的多级列表编号不显示的问题

    解决办法一 常见的办法是 xff1a 光标置于标题前方 xff0c 按 ctrl 43 xff0c 编号消失位置出现一小条灰色 xff0c 再按ctrl 43 shift 43 S 重新应用样式 确定 即可找回编号 注意 xff1a 但下次
  • GPS从入门到放弃(二十五)、卡尔曼滤波

    一 概述 单点定位的结果因为是单独一个点一个点进行的 xff0c 所以连续起来看数据可能出现上串下跳的情况 xff0c 事实上并不符合实际情况 为了解决这个问题 xff0c 考虑到物体运动的连续性和运动变化的缓慢性 xff0c 可以通过滤波
  • RealSenseD435i (一):Ubuntu18.04 下的安装、使用和bag录制 ,且解决 undefined symbol 问题(最简单的方法)

    注意 realsense ros 要和 librealsense 版本匹配 realsense ros 2 2 11 对应的 Realsense SDK 为 librealsense 2 31 0 否则后面会出现让人崩溃的问题 其中 nbs
  • ( C# + vs2017 )串口助手 零基础详细教程(二)

    感谢 xff1a 串口助手 简洁版 上位机软件零基础教程 xff08 C 43 visual studio2017 xff09 xff08 二 xff09 SWPU 机器人实验室 CSDN博客 在上篇博客中 xff0c 我们完成了串口助手
  • RTK定位技术原理

    RTK即载波相位差分技术 xff0c rtk定位能够实时地提供测站点在指定坐标系中的三维定位结果 xff0c 并达到厘米级精度 普通GPS的定位精度大于1米 xff0c 信号误差有50 的概率会达到2米以上 另外 xff0c GPS无法支持
  • Endnote的插件被禁止,始终加载不了 - 终极解决办法

    1 用管理员 的身份运行word xff1a 找到word 右键 以管理员的身份运行 2 打开一个word 文件 选项 加载项 转到 选择endnote cite while you write 点击删除 xff08 删除前记住你的endn

随机推荐