常见面试题答案

yubo-guan / 2024-03-21 / 原文

目录
  • 1. 介绍一下volatile关键字
  • 2. C++中的内联函数和宏的区别在于:
  • 3. 自己实现一个堆栈 C++实现 + 模板
  • 4. 函数后面加const的作用是什么?
  • 5. 纯虚函数和虚函数的区别?


1. 介绍一下volatile关键字

volatile是一个类型修饰符,用于告诉编译器对象的值可能会在编译器无法检测到的情况下被改变。


2. C++中的内联函数和宏的区别在于:

  • 内联函数是编译器编译时函数调用替换为函数体代码的一种优化方式,它保持了函数调用的语法并进行了类型安全检查
  • 而宏是预处理器编译前预处理阶段对代码进行文本替换没有类型安全检查,且可能导致意外的副作用。

3. 自己实现一个堆栈 C++实现 + 模板

#include <iostream>
#include <vector>
#include <stdexcept>

template <typename T>
class Stack {
private:
    std::vector<T> elems;   // 使用vector作为底层存储结构

public:
    // 判断栈是否为空
    bool isEmpty() const {
        return elems.empty();
    }

    // 获取栈大小
    size_t size() const {
        return elems.size();
    }

    // 入栈操作
    void push(const T& elem) {
        elems.push_back(elem);
    }

    // 出栈操作
    void pop() {
        if (isEmpty()) {
            throw std::out_of_range("Stack is empty!");
        }
        elems.pop_back();
    }

    // 获取栈顶元素
    T top() const {
        if (isEmpty()) {
            throw std::out_of_range("Stack is empty!");
        }
        return elems.back();
    }
};

4. 函数后面加const的作用是什么?

在C++中,成员函数后面加上const关键字表示这个成员函数是一个常量成员函数,它不能修改调用它的对象的任何数据成员。


5. 纯虚函数和虚函数的区别?

纯虚函数和虚函数的主要区别在于:

  • 纯虚函数在基类中没有默认实现,必须在派生类中实现,含有纯虚函数的类被称为抽象类,不能被实例化;
  • 而虚函数在基类中可以有默认实现,子类可以选择性地覆盖它们的实现,且含有虚函数的类可以被实例化