C++ 基础知识 问答题(一)

这篇具有很好参考价值的文章主要介绍了C++ 基础知识 问答题(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面整理了两篇博客(C++ 基础知识 面试题(一),C++ 基础知识 面试题(二))

但发现这样整理很低效,所以还是打算做成问答题的形式。

Part 1是题目, Part2是答案。

Part 1

1.const修饰引用时,作用是什么?用于什么场景?

2.const修饰成员函数时,作用是什么?

3.const常量和宏定义有哪些区别?

4.static修饰普通变量时存储在哪里?特点是什么?

5.static修饰普通函数时,作用的什么?

6.static修饰成员变量时,什么时候可以在类内初始化?

7.static修饰成员函数时,可以访问类内所有成员吗?

8.static修饰成员变量和成员函数时有什么共同点?

9.this指针是什么?

10.inline内联函数是什么?什么情况下会默认为内联函数?

11.内联的优点和缺点是是什么?

12.虚函数可以是内联函数吗?

13.创建和删除子类对象时,是如何调用构造函数和析构函数的?

14.父类的析构函数为什么必须是虚函数?

15.volatile关键字声明的变量有什么特点?应用场景有哪些?

16.常量可以用volatile关键字修饰吗?指针可以用volatile关键字修饰吗?

17.assert()是什么?可以关闭吗?

18.用extern修饰变量,作用是什么?

19. extern "C" 的作用是什么?

20.当定义了一个结构体 struct Apple{...}, 声明这个结构体的时候,可以直接使用Apple a;而不是struct Apple a;吗?

Part2

1.const修饰引用时,作用是什么?用于什么场景?

一般用于形参,这样可以避免拷贝,同时函数无法对形参进行修改。

2.const修饰成员函数时,作用是什么?

作用是成员函数不能修改成员变量。

3.const常量和宏定义有哪些区别?

const常量是常量声明,由编译器处理,有类型安全检查,系统会分配内存,保存在数据段,一旦声明不能取消。

宏定义是字符替换,由预处理器处理,没有类型安全检查,系统不会分配内存,保存在代码段,可以用#undef取消。

4.static修饰普通变量时存储在哪里?特点是什么?

static普通变量存储在静态存储区。

特点是仅在第一次调用时初始化,并在程序的整个生命周期都保持初始化时的值。

5.static修饰普通函数时,作用的什么?

作用是表明该静态函数只能在定义该函数的文件中使用,防止与其他文件中的函数重名。

6.static修饰成员变量时,什么时候可以在类内初始化?

一般情况下,static修饰的成员变量只能在类外初始化。

除非该变量同时也是常量或者枚举类型。

7.static修饰成员函数时,可以访问类内所有成员吗?

静态成员函数只能访问静态成员。

8.static修饰成员变量和成员函数时有什么共同点?

静态成员变量和静态成员函数都是属于类的,而不是属于对象的。

都只有一个副本,只会被分配一次内存。

无需创建对象,直接使用类名就能调用。

9.this指针是什么?

this指针是隐含在每一个非静态成员函数中的特殊指针,指向调用该成员函数的对象。

10.inline内联函数是什么?什么情况下会默认为内联函数?

内联函数会在调用该函数的位置直接展开函数体。

在类内定义成员函数时,除虚函数以外的成员函数都会被默认为内联函数。

当在类外定义成员函数时,成员函数会被默认为非内联函数。

11.内联函数的优点和缺点是是什么?

优点是:

  • 节省开销;
  • 和宏定义相比,有类型检查,可以调用类的成员变量,在运行时可以调试。

缺点是:

  • 代码膨胀,如果内联函数使用频率高且函数体复杂,就会造成代码膨胀;
  • 如果函数库中用到了内联函数,在对函数库进行升级后,需要重新编译使用该函数库的代(因为用到内联函数的代码需要展开内联函数的函数体)。如果没有用到内联函数,那么就不需要重新编译所有使用该函数库的代码,只需要重新链接该函数库。
  • 是否内联,由编译器决定。即便显示使用了inline关键字,编译器也不一定会对函数内联。

12.虚函数可以是内联函数吗?

虚函数可以是内联函数。

但只有在不表现多态特性时,才会生效。

  • 譬如虚函数是通过类的具体对象来调用的:
  • A a = new A();
  • a.virtualFunc();

当虚函数表现多态特性了,即便定义虚函数时使用了inline关键字,内联也不会生效。因为内联是在编译器,而多态特性需要在运行期才知道调用哪个类的虚函数。

  • 譬如使用指针或者引用来调用虚函数:
  • A* a = new B();
  • a.virtualFunc();

13.创建和删除子类对象时,是如何调用构造函数和析构函数的?

创建子类对象时,一般现在子类构造函数中显式调用父类构造函数,然后再执行子类构造函数。

删除子类对象时,一般会先调用子类析构函数,再自动调用父类析构函数。

14.父类的析构函数为什么必须是虚函数?

当父类指针指向一个子类对象时,删除该对象,如果父类的析构函数不是虚函数,就会只调用父类的析构函数,不会调用子类的析构函数,造成内存泄漏。

如果父类的析构函数是虚函数,那么当删除该对象时,就会根据对象的实际类型取调用析构函数,这样子类对象就会得到正确释放。

15.volatile关键字声明的变量有什么特点?应用场景有哪些?

该变量的值有可能会在程序执行期间改变,所以编译器不能优化该变量(比如放入CPU寄存器中),而是只能从内存中读取。

因为使用volatile关键字会影响效率,所以最好是在有需要的时候才使用,比如硬件交互时、多线程编程时。

16.常量可以用volatile关键字修饰吗?指针可以用volatile关键字修饰吗?

可以。可以。

17.assert()是什么?可以关闭吗?

是宏。表示断言。如果assert()内的判断条件值为false,那么就会结束程序。

可以在#include<cassert>前协商#define DEBUG 来关闭断言。

18.用extern修饰变量,作用是什么?

表示在当前文件中,只是声明了改变量。编译器需要去别的文件中找到该变量的定义。

19. extern "C" 的作用是什么?

因为在C++中引入了函数重载的机制,所以编译器会对函数进行名称修饰,将参数类型也加到函数名的后面。而C语言没有这个特性。

所以在C++中使用C代码时,为了正确编译C代码,可以使用extern "C"{}来包括C代码,这样编译器就知道要用C语言的规则来编译这段代码。

20.当定义了一个结构体 struct Apple{...}, 声明这个结构体的时候,可以直接使用Apple a;而不是struct Apple a;吗?

当不存在一个同名的Apple()函数时,可以直接使用Apple a;来声明这个结构体。

但当存在一个c同名的Apple()函数时,只能使用struct Apple a;来声明这个结构体。文章来源地址https://www.toymoban.com/news/detail-550782.html

到了这里,关于C++ 基础知识 问答题(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [TCP] TCP/IP 基础知识问答

    内容更新中 UDP(User Datagram Protocol),是无连接的、不可靠的传输层协议。 源port(16位),目标port(16位),总长度(16位),校验和(16位) 根据MTU的大小来判断。 MTU是数据链路层数据的最大长度,超出MTU大小的数据会被分片。 比如以太网的MTU大小是1500,IP层的头大小是20字节,

    2024年01月19日
    浏览(46)
  • 【C++】继承基础知识及简单应用,使用reportSingleClassLayout(在Visual Studio开发人员命令提示窗口)查看派生类详细信息

    author:Carlton tag:C++ topic:【C++】继承基础知识及简单应用,使用reportSingleClassLayout(在Visual Studio开发人员命令提示窗口)查看派生类详细信息 website:黑马程序员C++ date:2023年7月22日 目录 概要 继承规则 对象模型 构造析构顺序 同名与静态同名成员 多继承 菱形继承 VS开发人

    2024年02月16日
    浏览(53)
  • [C++]C++基础知识概述

      目录 C++基础知识概述::                                    1.什么是C++                                    2.C++发展史                                         3.C++                                    4.命名空间                              

    2023年04月16日
    浏览(52)
  • C++ | 语句的基础知识(夯实基础)

    本篇文章主要介绍数据结构中 C++ 的语句内容,适合有 零基础 的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! ☀️大家好!我是新人博主朦胧的雨梦,希望大家多多关照和支持😝😝😝 🌖大家一起努力,共同成长,相信我们都会遇到更好

    2024年02月05日
    浏览(52)
  • 【C++】C++模板基础知识篇

    个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 实现一个通用的交换函数: 在实现不同类型的参数Swap就得写很多个, 用起来太麻烦了。 使用函数重载虽然可以实现,但是有一下几个不好的地方: 重载的函数仅仅是类型不同,代码复用率比较低,只要

    2024年03月28日
    浏览(50)
  • C++大一基础知识

    目录 一、程序控制 ①输入输出 Ⅰ.cincout Ⅱ.scanfprintf ②运算与符号 Ⅰ常用数学函数#include Ⅱ.数据类型转换 ③控制结构 ④函数 Ⅰ.函数定义 Ⅱ函数使用 二、数据结构 ①一维数组 排序与查找 ②多维数组 ③指针 Ⅰ字符,指针运算 Ⅱ字符串函数#include Ⅲ指针参数与动态内存

    2024年02月09日
    浏览(58)
  • C++:基础知识

    1、内存四区 在C++程序执行时,内存可以被划分为以下四个区域: (1)代码区(Code Segment ) :代码区的声明周期从程序加载到内存开始,一直持续到程序结束。代码区中存储的是程序的 机器指令代码 ,这些指令在程序执行过程中被逐条执行。代码区的内容是 只读 的,不会

    2024年02月09日
    浏览(77)
  • C++基础知识

    数组和指针的区别 指针数组和数组指针 字符数组和字符串常量 引用和指针的区别 C++中class和struct的区别 new/delete和malloc/free区别 new运算符的原理 malloc的内存分配机制 栈和堆的区别 面向对象和面向过程的区别 const static extern volatile explicit 类

    2024年02月09日
    浏览(26)
  • C++ 从零基础到入门(3)—— 函数基础知识

    目录 一、函数简介 1、函数的作用和目的 2、函数的基本概念 二、函数定义与声明 1、函数定义的语法和结构 2、函数原型 三、参数传递 1、值传递 2、引用传递 3、指针传递 4、参数传递的选择 5.引用传递与指针传递的区别 四、返回值 1、返回类型 2、返回语句 在 C++ 中,函数

    2024年01月21日
    浏览(50)
  • 【C++】入门基础知识详解(二)

    目录 一、内联函数 1、概念 2、特性 3、内联函数与宏的优缺点 二、auto(C++11)   1、auto 简介   2、auto的使用细则     2.1 auto与指针和引用结合起来使用     2.2 在同一行定义多个变量   3、auto不能推导的场景     3.1 auto 不能作为函数的参数     3.2 auto 不能直接用来声

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包