IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++-面试 -> 正文阅读

[C++知识库]C++-面试

C++11新特性

auto decltype 就是可以自动推到变量或者数据类型 auto会自动被释放 栈区
auto和decltype区别在于auto一定要初始化 并且表达式的值就是初始化的值 而decltype就无关
lambda表达式
就是类似于一个匿名函数 可以有引用传递 值传递 混合传递 优点就在于定义完就立刻运行 而且在要使用的地方可以立刻定义 方便更改 一般配合auto 形成函数指针使用 如果用引用可能会造成悬挂引用 就是在引用前这个对象就被销毁了 造成指向被清理的内存空间
右值引用 && 什么是右值就是放在赋值号右边的值 一般就是不能被修改的值 右值引用也一定要初始化 左值可以寻址 右值不行 右值一般在常量区 全局区 而左值一般就是在堆栈区
move函数

智能指针
把普通的指针封装成栈对象 生命周期结束后就会在析构函数中释放掉内存
shared_ptr 每次被拷贝赋值初始化时 比如初始化 作为形参传入 或者指向别人的地址 都会计数+1 当值为0的时候就会自动销毁 他创建就等于内部new了一个地址 然后如果不初始化的话 系统自动赋初值为0
union_ptr 不允许拷贝和赋值
weak_ptr 主要是用来打破shared_ptr的指向循环造成的死锁问题 我们就用weak_ptr打破这个循环 weak_ptr就只有观测权 在使用时就会变成shared_ptr
C和C++的区别
C是面向过程C++面向对象 就是添加了类对象之类的 以类驱动程序运行
C主要是用于嵌入式和硬件打交道 C++主要是和操作系统应用层打交道
C++增加了强大的STL容器 泛型编程 重载 异常处理等
与JAVA就是什么垃圾回收啊 多重继承 虚拟机上运行 与开发平台无关 C++直接编译成可执行文件

重写 重载 隐藏的区别

隐藏:只需要同名并且父类不写virtual 如果参数不同 父类不写virtual也是隐藏
重写(覆盖)就是子类继承来的函数可以实现重写 函数名 返回类型 参数要完全一致
基类也要有virtual修饰
重载是同一个类 或者一个文件中一个函数可有多个类型 主要重载在于参数个数的不同 const也能实现重载

sizeof和strlen

strlen是库函数 字符数组作为形参调用sizeof的时候会被降为指针 所以是4 strlen不会
strlen一定要是char*类型变量 而sizeof都行 sizeof以\0结束

static

作用于类中的函数和成员变量时 就使该对象和类只和类有关 和对象无关
作用于局部变量 改变了生命周期 在程序结束时销毁
作用于全局变量和函数时改变了作用于 只能在当前文件使用 不具有全局性
类的静态成员只能访问类的静态成员变量 静态成员函数 主要是因为static实际上是取消了类的this指针 所以不能使用virtual const 和volatile
const和volatile主要就是修饰this指针 将他变成const 现在取消了自然就没有意义了
静态成员变量要在类内声明类外初始化
静态成员变量是被所有对象和继承类 继承对象共享
静态成员变量也可以在类中作为其他成员函数的参数 普通成员变量不行

const

就是将变量变为常量 不能修改 相较于宏定义 可以进行类型检查
修饰函数参数 使函数参数在函数中不能被修改
修饰成员函数就是修饰this 自然就不能修改成员类的任何成员变量
const成员变量只能在狗仔函数初始化列表初始化 这个const成员变量只是相对于某个对象的 因为每个对象在创建的时候都是可以初始化一次这个变量

const和宏的区别

宏是直接将字符替换 用多少次就替换多少次 所以占用内存较大 不会进行任何类型判断
const是在编译阶段确定值 会进行安全性检查 在静态区 只有一份

typedef和宏的区别

typedef是在编译时处理 有类型检查功能 主要用来定义类型的别名

内联函数

不像正常函数需要将参数压入栈 再寻找函数地址 将参数从栈中拿出 得出结果再返回原来运行处 再进行调用 而是直接将函数在调用处展开 减少了调用函数的开销 提高了运行效率 类内定义的成员函数会自动声明成内联函数

new和malloc的区别

malloc 和 free 是库函数,而new 和 delete 是运算符 关键字
new在申请内存也会调用对象的构造函数 而且会自动计算大小
malloc 只会申请内存 指定大小
new申请空间返回的就是该对象类型的对象指针 会自动推断
malloc是先返回void* 然后 就是(int*)malloc(sizeof(int)) 前面那个(int*)就是强制转换
new分配失败的时候返回异常 malloc分配失败时返回空指针
new是在自由存储区为对象动态分配内存 而malloc是在堆上分配
delete 在释放内存之前 会调用对象的析构函数 free 只会释放内存。

虚函数的实现机制

虚函数的地址存放虚函数表中 类的对象地址中存储了指向虚函数表的虚函数表指针vptr
虚函数表在编译阶段建立 虚表指针vptr放在类对象的最前面

构造函数为什么不能定义成虚函数

第一 虚函数需要虚函数指针才能调用 但是构造函数是在对象构造时调用 此时还没有虚函数指针 所以没办法找到虚函数的位置

析构函数为什么要设置成虚函数

因为如果用基类指针指向子类时 在销毁时 如果不将析构函数设置成虚函数 只会调用基类的析构函数 会造成内存泄漏

空类问题

空类定义时会自动生成六个函数
请添加图片描述
字节为1 主要是唯一表示该类的位置

类对象的初始化顺序

基类构造函数–>派生类成员变量的构造函数–>派生类自己的构造函数
就是要注意中间那个 如果派生类的成员变量中有父类对象 则也会再调用一次父类的构造函数

#include <iostream>
using namespace std;

class A
{
public:
    A() { cout << "A()" << endl; }
    ~A() { cout << "~A()" << endl; }
};

class B
{
public:
    B() { cout << "B()" << endl; }
    ~B() { cout << "~B()" << endl; }
};

class Test : public A, public B // 派生列表
{
public:
    Test() { cout << "Test()" << endl; }
    ~Test() { cout << "~Test()" << endl; }

private:
    B ex1;//第二个B()A()是调用了这里对象的构造函数
    A ex2;
};

int main()
{
    Test ex;
    return 0;
}
/*
运行结果:
A()
B()
B()
A()
Test()
~Test()
~A()
~B()
~B()
~A()
*/

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/efurq1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

深拷贝浅拷贝

仔细去看一下

指针和引用

指针会分配内存地址 引用不会 引用必须被初始化且不能再改变指定 而指针可以

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 13:57:27  更:2021-07-22 13:59:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 3:45:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码