C++高频面试知识总结 part1

面向对象

  • 1.什么是类?
  • 2.面向对象程序设计思想?
  • 3.多态的实现?
  • 4.动态多态的作用?
  • 5.动态绑定的实现?
  • 6.纯虚函数的作用以及实现?
  • 7.虚函数表如何维护?
    • 推荐阅读
  • 8.C++ struct和类的区别?
  • 9.C++中类成员的访问权限?

1.什么是类?

是一种用户定义的数据类型,包含了数据成员和函数成员。数据成员存储与类相关的状态,函数成员定义对数据进行操作的方法。

2.面向对象程序设计思想?

面向对象程序设计(OOP)有三大特征,封装继承和多态。
封装:将数据属性和操作方法打包,形成独立的对象,只暴露必要的接口。
继承:允许子类继承父类的属性和方法,并且可以创建新的方法。
多态:不同类的对象使用同一接口进行调用,有不同的行为。

3.多态的实现?

  • 静态多态:编译时发生,通过函数重载、运算符重载实现
    • 函数重载:参数类型或者数量不同来实现
    • 运算符重载:为类定义新的操作符函数
  • 动态多态:运行时发生,通过虚函数实现
    • 虚函数:一个函数在基类被声明为虚函数时,可以在派生类重写
    • 纯虚函数和抽象类:类中声明一个虚函数不提供实现(=0)包含纯虚函数成为抽象类,抽象类不能被实例化,只能被继承,派生类必须提供纯虚函数的实现

4.动态多态的作用?

允许运行时通过基类指针或引用调用派生类的方法,使得相同操作有不同的效果。
实现的必要条件:
1.继承:必须有两个类,基类和派生类
2.基类中有虚函数:基类中至少一个函数被virtual关键字声明为虚函数,派生类通常会重写该虚函数
3.基类的指针或引用:需要通过基类的指针或引用掉用虚函数,这样c++运行时才能够根据虚函数表来决定调用哪个函数
4.动态绑定

5.动态绑定的实现?

通过虚函数实现。当我们用基类指针或引用调用一个虚函数,C++会根据对象实际类型决定调用的函数。示例code如下:

//基类
class Animal {virtual void Sound() {std::cout << "animal sound" << std::endl;}
};//派生类
class Dog: public Animal {void Sound() override {std::cout << "Woof" << std::endl;}
};class Cat: public Animal {void Sound() override {std::cout << "Maio" << std::endl;}
};//基类指针调用派生类
Animal* animal = new Dog();
animal->Sound();//输出Woof 

6.纯虚函数的作用以及实现?

纯虚函数用于创建抽象类,不能直接实例化,只能被继承,用于定义派生类应当遵循的接口。
作用:

  1. 定义接口规范:规定了派生类必须实现的函数,确保各派生类都遵循同一接口规范
  2. 阻止基类实例化:不能创建基类的对象,只能创建派生类对象

7.虚函数表如何维护?

当我们定义一个类,并且类中有虚函数时,这个类就会有一个虚函数表,存放类中所有虚函数地址的数组,在编译时,一个类的虚函数表就确定了,它放在了只读数据段中。。每一个实例,只要他的类有虚函数,那么就会有一个指向该虚函数表的指针,虽然不同的实例有自己的虚函数表指针,但是同一个类的所有对象共享一个虚函数表
比如说:

//基类
class Animal {virtual void Sound() {std::cout << "animal sound" << std::endl;}
};//派生类
class Dog: public Animal {void Sound() override {std::cout << "Woof" << std::endl;}
};class Cat: public Animal {void Sound() override {std::cout << "Maio" << std::endl;}
};Animal* pig = new Animal();
Animal* mouse = new Animal();

pigmouse都有一个指针指向Animal的虚函数表,但是他们指向的虚函数表是相同的。
上述代码中子类cat继承自Animalcat类也会有虚函数表,但是sound()函数被重写了,cat类中虚函数表中sound的地址会被替换为cat sound的地址。

推荐阅读

C++多态虚函数表详解(多重继承、多继承情况)
C+±[override]关键字使用详解

8.C++ struct和类的区别?

在c++中极其相似,都可以包含数据成员,成员函数,构造析构函数,成员函数重载,运算符重载等。只有默认访问权限和默认继承类型的区别。
默认访问权限:class是private,struct是public
默认继承类型:class是private,struct是public

9.C++中类成员的访问权限?

三个访问修饰符
public:任何地方都可以访问
protect类内部派生类可以访问,但是不能通过类的对象直接访问
private:类内部访问,只能被类的成员函数友元函数访问

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

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

相关文章

pytorch常用的模块函数汇总(1)

目录 torch&#xff1a;核心库&#xff0c;包含张量操作、数学函数等基本功能 torch.nn&#xff1a;神经网络模块&#xff0c;包括各种层、损失函数和优化器等 torch.optim&#xff1a;优化算法模块&#xff0c;提供了各种优化器&#xff0c;如随机梯度下降 (SGD)、Adam、RMS…

手机投屏到windows11电脑

1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息

每日一题 --- 四数之和[力扣][Go]

四数之和 题目&#xff1a;18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组…

FL Studio21.2.3中文版软件新功能介绍及下载安装步骤教程

FL Studio21.2中文版的适用人群非常广泛&#xff0c;主要包括以下几类&#xff1a; FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55981 FL Studio 21 Mac-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55982 音乐制作人&#xff1a…

开发指南020-banner

<dependency><groupId>org.qlm</groupId><artifactId>qlm-common</artifactId><version>1.0-SNAPSHOT</version> </dependency> 以上组件封装了平台的banner&#xff0c;不做任何配置的话&#xff0c;将输出平台的banner 想修…

二维码门楼牌管理应用平台建设:三维白模数据建设的意义

文章目录 前言一、三维白模数据建设的意义二、二维码门楼牌管理系统的构建三、二维码门楼牌管理系统的优势四、面临的挑战与未来展望 前言 随着城市管理的精细化和智能化需求日益增强&#xff0c;二维码门楼牌管理应用平台的建设成为推动城市管理现代化的重要手段。本文将探讨…

预处理、编译、汇编、链接过程

预处理、编译、汇编、链接过程 预处理 引入头文件 #include 展开宏定义 #define 处理条件编译指令 #ifdef 删除注释 添加行号 在Linux下可以使用gcc -E命令把hello.c文件预处理成hello.i文件。windows这些操作都集成在编译器visual studio这些里面了。 编译 进行语法分…

第几个幸运数字(蓝桥杯)

文章目录 第几个幸运数字题目描述答案&#xff1a;1905生成法C代码代码详细注释代码思路解释 第几个幸运数字 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 到x星球旅行的游客都被发给一个整数&#xff0c;作为…

Opencv C++和Python教程

1、何为Opencv? OpenCV是一个开源的计算机视觉和机器学习库,它提供了丰富的图像处理和计算机视觉算法,如图像处理、目标检测、人脸识别、物体跟踪等。OpenCV最初由英特尔公司发起,现在是由社区维护和开发。OpenCV支持多种编程语言,如C++、Python、Java等,可以在不同的操…

软考高级架构师:安全模型概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

软考高级架构师:信息安全保护等级

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Java接口实战:模拟咖啡制作、订购与消费完整流程(day14)

定义接口&#xff1a; // 咖啡制作接口 interface CoffeeMaker { Coffee makeCoffee(String type); } // 咖啡店接口 interface CoffeeShop { void orderCoffee(String type, CoffeeConsumer consumer); } // 咖啡消费者接口 interface CoffeeConsumer { void …

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑新能源发电商租赁共享储能的电力市场博弈分析》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

解决前后端通信跨域问题

因为浏览器具有同源策略的效应。 同源策略是一个重要的网络安全机制&#xff0c;用于Web浏览器中&#xff0c;以防止一个网页文档或脚本来自一个源&#xff08;域、协议和端口&#xff09;&#xff0c;获取另一个源的数据。同源策略的目的是保护用户的隐私和安全&#xff0c;防…

maven pom relativePath属性的作用

maven pom relativePath属性的作用 文章目录 maven pom relativePath属性的作用一、relativePath出现的地方二、relativePath默认值三、四、<relativePath>一个pom路径 一、relativePath出现的地方 搭建maven项目&#xff0c;子模块指定父模块试&#xff0c;经常会在par…

专升本-信息技术介绍

信息技术是什么&#xff1f; 用于管理和处理信息所采用的各种技术的总称 以电子计算机和现代通信为主要手段 位于信息科学体系的技术应用层次 新一代信息技术有哪些&#xff1a; 代表性&#xff1a;人工智能&#xff0c;量子信息&#xff0c;移动通信&#xff0c;物联网&a…

Ubuntu中文输入法设置指南:轻松上手,畅享输入体验

在Linux的世界里,Ubuntu以其强大的功能和优美的界面设计赢得了众多用户的喜爱。然而,对于许多中文用户来说,如何在Ubuntu上设置中文输入法却是一个不小的挑战。今天,就让我来为大家详细介绍一下如何在Ubuntu上轻松设置中文输入法,让您的输入体验更加流畅自如。 首先,我们…

【使用python读取多类型文件夹中的文档内容】

突发奇想&#xff0c;想使用python读取多类型文件夹中的文档内容&#xff0c;在Python中&#xff0c;读取多类型文件夹中的文档内容通常涉及几个步骤&#xff1a; 遍历文件夹以获取文件列表。根据文件扩展名判断文件类型。使用适当的库或方法来读取每种文件类型的内容。 以下…

java数组与集合框架(三)--Map,Hashtable,HashMap,LinkedHashMap,TreeMap

Map集合&#xff1a; Map接口: 基于 键&#xff08;key&#xff09;/值&#xff08;value&#xff09;映射 Map接口概述 Map与Collection并列存在。用于保存具有映射关系的数据:key-value Map 中的key 和value 都可以是任何引用类型的数据Map 中的key 用Set来存放&#xff0…

stitcher类实现多图自动拼接

效果展示 第一组&#xff1a; 第二组&#xff1a; 第三组&#xff1a; 第四组&#xff1a; 运行代码 import os import sys import cv2 import numpy as npdef Stitch(imgs,savePath): stitcher cv2.Stitcher.create(cv2.Stitcher_PANORAMA)(result, pano) stitcher.st…