c++面试基础知识点

c++面试基础知识点

持续更新

1、 c++ struct和class有什么区别?

答案 在C++里,`struct`和`class`主要区别在于默认访问权限: - `struct`默认成员和继承权限是`public`。 - `class`默认成员和继承权限是`private`。

其他方面,二者语法和功能基本一致。

  • struct:可以和C语言的struct保持较好的兼容性,当你需要编写既可以在C语言中使用,又可以在C++中使用的代码时,使用struct更合适。
  • class:是C++特有的概念,不能直接在C语言中使用。

🌋🌋🪂🪂🚀🚀🛰️🛰️🛰️〰️〰️〰️分界线〰️〰️〰️🌋🌋🪂🪂🚀🚀🛰️🛰️🛰️

2、 C++里,const 用途详细介绍并举例

答案

在C++里,const 用途广泛,以下为你详细介绍并举例:

1. 定义常量

  • 用途:声明常量,保证其值在初始化后不可修改,提高代码安全性和可读性。
  • 示例
const int MAX_SIZE = 100;
// MAX_SIZE = 200;  // 编译错误,不能修改常量的值

2. 修饰函数参数

  • 用途:表明函数不会修改传入参数的值,避免意外修改,还能接收常量对象。
  • 示例
#include <iostream>
void printValue(const int num) {
    // num = 10;  // 编译错误,不能修改const参数
    std::cout << num << std::endl;
}
int main() {
    const int a = 5;
    printValue(a);
    return 0;
}

3. 修饰成员函数

  • 用途:表明该成员函数不会修改对象的成员变量,常被用于读取对象状态的函数。
  • 示例
#include <iostream>
class Rectangle {
private:
    int width, height;
public:
    Rectangle(int w, int h) : width(w), height(h) {}
    int getArea() const {
        // width = 10;  // 编译错误,const成员函数不能修改成员变量
        return width * height;
    }
};
int main() {
    const Rectangle rect(3, 4);
    std::cout << rect.getArea() << std::endl;
    return 0;
}

4. 修饰指针

  • 用途:分为常量指针(指针指向的内容不可变)和指针常量(指针本身不可变),明确指针的使用规则。
  • 示例
int num = 10;
// 常量指针:指向的内容不可修改
const int* ptr1 = &num;
// *ptr1 = 20;  // 编译错误,不能通过ptr1修改指向的值
// 指针常量:指针本身不可修改
int* const ptr2 = &num;
// ptr2 = nullptr;  // 编译错误,不能修改ptr2指向的地址

5. 修饰引用

  • 用途:保证引用的对象不被修改,常用于函数参数传递,避免复制开销。
  • 示例
#include <iostream>
void printRef(const int& ref) {
    // ref = 10;  // 编译错误,不能通过const引用修改对象
    std::cout << ref << std::endl;
}
int main() {
    int value = 5;
    printRef(value);
    return 0;
}

🌋🌋🪂🪂🚀🚀🛰️🛰️🛰️〰️〰️〰️分界线〰️〰️〰️🌋🌋🪂🪂🚀🚀🛰️🛰️🛰️

3、虚基类和抽象类区别

答案 虚基类:虚基类主要用于解决菱形继承(钻石继承)问题。在菱形继承结构中,若不使用虚基类,最终派生类会从不同路径继承到多份相同的基类成员,导致数据冗余和访问二义性。使用虚基类可以保证最终派生类中只有一份基类成员,避免这些问题。

抽象类:抽象类主要用于定义接口,为派生类提供统一的操作规范。它不能实例化对象,只能作为基类被继承,派生类必须实现抽象类中的所有纯虚函数,否则派生类也会成为抽象类。通过抽象类可以实现多态性,提高代码的可扩展性和可维护性。例如:

posted @ 2025-02-22 13:48  lhd_96  阅读(39)  评论(0)    收藏  举报