铭正文案网-每一句好文案都值得收藏

铭正文案网-每一句好文案都值得收藏

c++面试题?

59

指针和引用的区别

指针是一块内存地址,存储的是变量的地址,可以动态改变。

引用是变量的别名,创建后就不能更改。

指针能指向空地址(nullptr),但引用不能。

指针可以做“加法操作”,偏移地址访问内存,而引用不能。

构造函数和析构函数的作用

构造函数负责初始化对象。

析构函数负责释放对象占用的资源,防止内存泄漏。

虚函数的作用

虚函数实现多态,允许基类的指针或引用调用派生类的成员函数。

虚函数通过虚函数表实现,调用时根据实际对象类型进行动态绑定。

new和malloc的区别

`new`是C++运算符,调用对象构造函数,并返回指向对象的指针。

`malloc`是C语言函数,只分配内存,不调用构造函数,需要手动调用`free`释放内存。

struct和class的区别

`struct`的默认访问权限是`public`,而`class`的默认访问权限是`private`。

多态的实现

编译时多态(函数重载)。

运行时多态(虚函数)。

内存管理

使用`new/delete`进行内存分配和释放,它们会调用对象的构造函数和析构函数。

避免内存泄漏,及时释放不再使用的内存。

C++11新特性

`auto`关键字用于自动推导变量类型。

`nullptr`和`NULL`的区别:`nullptr`是C++11引入的空指针常量,而`NULL`通常是一个宏定义(如`0`或`(void*)0`)。

设计模式

单例模式:确保一个类只有一个实例,并提供一个全局访问点。

观察者模式:定义对象间的一种一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。

未定义行为和实现定义行为

未定义行为:标准中完全没有规定,行为不可预测,不可依赖,完全不可利用。

实现定义行为:标准中规定,行为可预测,可靠的,可完全利用,可跨平台使用,但具体实现由编译器平台自由选择。

这些面试题涵盖了C++的基础知识、面向对象编程、内存管理等多个方面,是面试中常见的问题。建议你在准备面试时,重点复习这些知识点,并多做一些实际编程练习,以加深理解和记忆。