C++常考面试题(第二篇)

【题目 16】拷贝构造函数的格式和作用,自动调用拷贝构造函数的几种情形?

格式:没有返回值 函数名和类名相同 参数:const person& 类型引用
作用:逐个给成员变量进行赋值三种情形下会调用拷贝构造函数
(1) 当用一个已有对象给另一个同类的对象进行初始化时 person a = b;
(2) 当一个函数的参数是一个类的对象时 void fun(person p); fun(a);
(3) 当一个函数的返回值是一个类的对象时 person fun(); person a = fun();
问题: 拷贝构造函数是值传递还是什么,为什么?
引用传递
因为使用值传递导致无限拷贝,进入死循环
person(const person other)//const person other = a;拷贝
{ }
person a;
person b = a;

【题目 17】深拷贝与浅拷贝的区别?

当类中有指针成员时,
1.浅拷贝只将指针中保存的地址复制给新的对象,实际上还是指的同一块内存,当析构函数对两个对象进行内 存释放时会出现 double free 异常(释放第一个对象时,已将内存删除,第二个对象释放时还是找的原有地址, 但内存已不存在)。
2.深拷贝拷贝时不拷贝地址,是将原对象指针中指向的内存进行拷贝,新对象指针存储新内存的地址,原对象指针存储原内存的地址,所以释放时互不干扰。 (系统默认的拷贝构造:浅拷贝)

【题目 18】友元的作用及特点?

当在类的外面想要使用该类的私有成员,可以通过友元来破坏封装性;
可以使用友元函数(在类外编写函数,在类内声明为友元函数)、友元类(声明一个类来访问另一个类中的私有成员)。
特点:友元不能继承,友元不能传递,友元是单向的。

 

 

【题目 19】设计模式--单例模式

作用:单例模式是保证程序中这个类只有一个实例对象;
什么情况下想到使用单例模式:有一个类的功能,多处都要使用,多次的创建与销毁。
实现方式:
1.构造函数和拷贝构造函数私有化,保证在类的外部不能创建和拷贝对象(0 例)
2.在类的内部留出一个静态私有的本类的指针用来承接惟一的实例,并在类外初始为 NULL
3.在类的内部编写一个静态公有函数来获取实例,判断指针是否存有地址。
如果有地址,则直接返回实例,如果没有,使用 new 关键字创建一个实例并返回。
        
class One
{
        One(){}
        One(const One& other){}
        static One* instance;
public:
        static One* getInstance()
        {
                if(instance == NULL)
                        instacne = new One;
                return instance;
        }
};
One* One::instacne = NULL;
int main()
{
        One* p = One::getInstance();
        One* p1 = One::getInstance();
        //p 和 p1 地址是相同的
}

【题目 20】C++异常处理有几个步骤

步骤:先 try(检测),遇到异常时 throw(抛出),在检测块外对抛出的异常进行 catch(捕获),并处理。
void fun(int a)
{
        if(a == 0)
        throw a;
        cout<<a<<endl;//不会执行}
int main(){
        try
        {
                //待检测语句
                fun(0);
                cout<<”----”<<endl;//不执行
        }
        catch(int a)
        {
                cout<<a<<endl;//0
        }

【题目 21】面向对象的三大特征是什么?请简要描述一下?

(1) 封装,将具有相同属性和行为的一系列对象封装成一个类,将一系列重复性的代码封装成函数,数据的隐藏,将不对外公开的属性和行为使用 private 进行修饰,保证数据安全。
(2) 继承,子类继承父类的变量和函数,C++的继承允许一个子类同时继承多个父类。
(3) 多态,一种状态多种表现形式,具体体现在父类指针(引用)指向子类对象。

【题目 22】类中默认存在的函数有哪些,为类 Empty 写出函数的定义?

默认存在的函数有:
默认的构造 默认的拷贝 默认的析构 =运算符重载 &运算符重载
Empty(){}
Empty(const Empty& o){}
~Empty(){}
Empty& operator= (const Empty& other){}
Empty* operator& (){ }

【题目 23】在继承时,继承方式都有什么影响?

当用 public 继承时,派生类继承到的所有成员访问权限不变。
当用 protected 继承时,派生类继承到的 public 成员变为 protected,其余不变。
当用 private 继承时,派生类继承到的所有成员都为 private。

【题目 24】什么是虚函数?虚函数有什么作用?

使用 virtual 关键字修饰的函数,为虚函数。
作用:实现运行时多态;
当父类指针(引用)指向子类对象时,调用一个父类和子类都有的函数,如果父类的是虚函数,那么调用的是 子类覆盖(重写)后的,如果不是虚函数则调用父类原有的,调用子类重写的。

 

【题目 25】C++重写(覆盖)、重载、重定义(遮蔽)的区别? 

重载特征:
1、相同的范围(在同一个类中/同一个作用域内)
2、函数名字相同
3、参数列表不同
4、virtual 关键字可有可无
重写(覆盖)是指派生类函数覆盖基类函数,特征是:
1、不同的范围,分别位于基类和派生类中
2、函数的名字相同
3、参数相同,返回值相同
4、基类函数必须有 virtual 关键字
重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
1、如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无 virtual,基类的函数被隐藏。
2、如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 vitual 关键字,此时, 基类的函数被隐藏。

【题目 26】多态有几种,如何实现的运行时多态?

多态分为:编译时多态,运行时多态 或者 (静态多态、动态多态)
静态多态:函数重载与泛型编程,静态多态是程序调用函数,编译器决定使用哪个可执行代码块。
动态多态:是由继承机制及虚函数实现的。通过父类指针指向子类对象,访问派生类中同名重写成员函数。
多态的作用:同一个事务具有了多种的表现形态;把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
1.实现的方法:子类继承父类,重写父类中的虚函数。父类指针指向子类对象时,可以通过父类的指针调用子类中重写的函数。
2.多态存在的 3 个条件
1)有继承
2)有重写(虚函数)
3)父类指针或引用指向子类对象

 

【题目 27】什么是纯虚函数,什么是抽象类?

1.纯虚函数格式:直接在虚函数声明时=0;virtual void fun() = 0;
2.纯虚函数在父类中没有具体实现,在具体的实现子类中重写实现。
3.抽象类:至少有一个纯虚函数的类叫抽象类,抽象类不能实例化对象,但是可以声明抽象类的指针; 抽象类时专门被继承的,纯虚函数专门被子类重写的。
4. 抽象类可以被继承,继承的派生类如果不是抽象类,必须要实现纯虚函数
class shape 抽象类
{
        virtual void fun1() = 0;virtual void fun2() = 0;
        virtual void fun3() = 0;
};
class B: public Shape //子类 B 也变成了抽象类
{
        void fun1(){}
        //继承了两个纯虚函数
};

【题目 28】虚析构函数的作用

多态时,当用父类指针指向子类对象时,释放父类对象时不会调用子类的析构函数,所以定义父类的析构函数 时需要加 virtual,使其成为虚析构函数;

结语

本次C++面试题分享到此结束,以上有些内容我主页有单独讲解,大家觉得有用的话,可以点点赞,点点关注,后续还会分享有关C++知识,谢谢大家!

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

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

相关文章

Zynq学习笔记--AXI 总线仿真(AXI VIP)

目录 1. 概述 2. Simulation with AXI VIP 2.1 axi_vip_pkg 2.2 design_1_axi_vip_0_0_pkg 2.3 参数指定 3. 实例化注意事项 3.1 名称对应关系 3.2 寄存器地址 3.3 block design 1. 概述 AXI Verification IP&#xff08;AXI VIP&#xff09;是一种用于验证AXI总线协议的…

09 SQL进阶 -- SQL高级处理 -- 窗口函数等

1. 窗口函数 1.1 窗口函数概念及基本的使用方法 窗口函数也称为 OLAP 函数。OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。 为了便于理解,称之为窗口函数。常规的 SELECT 语句都是对整张表进行查询,而窗口函数可以让我们有选择的去某…

Spring @Transactional 注解

官方文档&#xff1a;https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html#:~:textThe%20%40Transactional%20annotation%20is%20metadata,suspending%20any%20existing%20transaction%22). 推荐阅读&#xff1a;https:…

基于springboot实现大创管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现大创管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足&#xff0c;创建了一个计算机管理大创管理系统的方案。文章介…

Re65:读论文 GPT-3 Language Models are Few-Shot Learners

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Language Models are Few-Shot Learners ArXiv网址&#xff1a;https://arxiv.org/abs/2005.14165 2020 NeurIPS&#xff1a;https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb49674…

集成sa-token实现登录和RBAC权限控制

集成sa-token实现登录和RBAC权限控制 文章目录 1.sa-token是什么&#xff1f;1.1简介1.2官网1.3 Sa-Token 功能一览1.4 功能结构图 2.集成sa-token及配置2.1 pom依赖2.2 yaml配置2.3 代码配置 4.RBAC权限控制表设计5.菜单权限树构造实现5.1菜单权限数据sql查询5.2菜单权限树构建…

solidity(10)

&#x1f52e; Solidity变量指南&#xff1a;探寻状态、局部和全局三界之秘&#x1f30c; 在Solidity的神秘大陆上&#xff0c;变量就像是散落在时间和空间中的宝石&#x1f48e;&#xff0c;每颗都有它独特的魔力和作用域。掌握这三种变量&#xff0c;是成为合约法师的重要一…

Vue项目学习(一)-SQL闯关

Hello , 我是小恒不会java。今天来阅读一个Vue纯前端项目--SQL在线闯关 进步的方法除了文档书籍视频&#xff0c;学会阅读源代码&#xff0c;从代码中学会解决需求的方法也是必要的 已部署完成&#xff0c;在线体验&#xff1a;http://sql.yunduanjianzhan.cn 背景 简介 闯…

《黑神话:悟空》现已正式上架PS商城,今晚或有大动作

关于《黑神话&#xff1a;悟空》的消息可谓是喜闻乐见&#xff01;今天晚上19:10可能会有相关游戏内容放出&#xff0c;让人非常期待。而海信电视推出的《黑神话&#xff1a;悟空》专属画质模式&#xff0c;让玩家可以享受到更加细腻的游戏画面。 此外&#xff0c;海信和《黑神…

高级感拉满的个人UI网页

效果图 PC端 移动端 部分代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>Zboy的主页</title><link rel"stylesheet" href"css/normalize.css" /><link rel&qu…

SAP项目任务一览表

根据SAP Activate项目管理方法论的主要精神&#xff0c;浓缩到一些主要的团队和任务。 主要的团队有&#xff1a; 项目管理(办公室)Project Management(office)&#xff1a;项目经理团队&#xff0c;包括项目办公室。负责项目整体运行和监控&#xff0c;项目办公室负责项目的…

李沐-19 卷积层【动手学深度学习v2】

记录下关于权重下标变换的理解&#xff1a; 从原来的Wi,j到Wi,j,k,l是从二维到四维的过程&#xff0c;如下图所示 对全连接层使用平移不变性(如&#xff1a;卷积核在移动过程是不变的)和局部性&#xff08;如&#xff1a;卷积核有一定大小&#xff09;得到卷积层&#xff0c;这…

【leetcode】双指针算法技巧——滑动窗口

标题&#xff1a;【leetcode】双指针算法技巧——滑动窗口 水墨不写bug 正文开始&#xff1a; 滑动窗口介绍 滑动窗口是一种常用的算法技巧&#xff0c;用于解决一些涉及 连续子数组或子串 的问题。它的基本思想是 维护一个窗口&#xff0c;通过 在窗口内移动 来寻找满…

如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

xgplayer插件的使用-西瓜播放器 ---- Vue3中使用

xgplayer 视频 一、xgplayer官网 xgplayer官网 - 点我进入 一、xgplayer简单介绍 西瓜播放器是字节跳动推出的一款播放器。 稳定性好&#xff08;大厂&#xff08;字节跳动&#xff09;出品&#xff09;&#xff1b;插件方便实用且简洁高雅&#xff1b;官网文档清晰&#xff1b…

[Linux - C] 自主Shell

[Linux - C] 自主Shell [Linux - C语言] 自主Shell逻辑策划 main()打印命令行 void MakeCommandLineAndPrint()用户名 USER主机名 HOSTNAME当前目录 PWDSkipPath 切割目录打印命令行 获取用户字符串 int GetUserCommand()检查重定向 void CheckRedir()切割字符 void SplitComma…

数据加密、文档加密为什么都选择安企神软件

数据加密、文档加密为什么都选择安企神软件 免费试用安企神 在数据加密和文件加密领域&#xff0c;有众多优秀的软件&#xff0c;他们功能各异、价格不同、效果也大相径庭&#xff0c;经过对比使用、用户口碑和技术网站评判&#xff0c;安企神在各方面都稳坐第一把交易。其原…

新闻媒体行业邮件推广:精准推送,创造价值

在当今信息爆炸的时代&#xff0c;新闻行业如何在竞争激烈的市场中脱颖而出&#xff0c;吸引读者的目光&#xff0c;成为了每个新闻机构都需要认真思考的问题。许可式邮件营销成为了一种强大的工具&#xff0c;不仅能够向订阅者发送新闻期刊&#xff0c;还能够向广告商发送宣传…

【基础物理实验】【AFM虚拟实验】基于AFM的物质表面微观结构及力学性质表征仿真实验(下)【北京航空航天大学】

本次实验&#xff08;上&#xff09;见博客&#xff1a;【基础物理实验】【AFM虚拟实验】基于AFM的物质表面微观结构及力学性质表征仿真实验&#xff08;上&#xff09;【北京航空航天大学】 本次实验&#xff08;中&#xff09;见博客&#xff1a;【基础物理实验】【AFM虚拟实…

LLamaSharp加载llama.cpp转化好的模型

新建.net8控制台项目 安装依赖包 LLamaSharp和LLamaSharp.Backend.Cpu 准备好转化好的模型 没有的话参考这篇文章https://blog.csdn.net/qq_36437991/article/details/137248622 编写代码 using LLama; using LLama.Common; using LLama.Native;namespace llamasharpstu…