Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

SYaoJun/CPPInterview

Repository files navigation

GitHub

C/C++基础面试问题

类中成员函数有两个void hello()void hello() const,怎么在调用是区分调的哪一个?

根据创建的实例对象而决定,如果实例对象是const则自动调第二个,如果非const调用第一个。

析构函数是否可以重载?析构函数是否可以是虚函数?如果不是虚函数会产生什么问题?举个例子

析构函数不可以重载。 析构函数不重载,可能导致父类资源无法释放。 构造函数的调用顺序是,先构造父类,再构造子类。析构函数的顺序是反过来的,先析构子类,再析构父类。

#include <iostream>
class Base {
public:
 Base() {
 std::cout << "Base constructor called." << std::endl;
 }
 // 注意:这里没有将析构函数声明为虚函数
 ~Base() {
 std::cout << "Base destructor called." << std::endl;
 }
};
class Derived : public Base {
public:
 Derived() {
 std::cout << "Derived constructor called." << std::endl;
 }
 ~Derived() {
 std::cout << "Derived destructor called." << std::endl;
 }
};
int main() {
 Base* ptr = new Derived(); // 创建一个Derived对象,并用Base指针指向它
 delete ptr; // 通过基类指针删除对象
 return 0;
}
// 如果析构不是虚函数,那么只会释放父类的资源,而泄露了子类的资源

什么场景需要用dynamic_cast?

如果想要将父类转换为子类,需要父类中至少有一个虚函数,dynmic_cast依赖于运行时类型信息(RTTI),因此需要虚函数的存在。

## #include <iostream>
#include <exception>
class Base {
public:
 virtual ~Base() {} // 基类需要至少一个虚函数(通常是析构函数),以支持RTTI
};
class Derived1 : public Base {
public:
 void derived1Function() {
 std::cout << "Derived1 function called." << std::endl;
 }
};
class Derived2 : public Base {
public:
 void derived2Function() {
 std::cout << "Derived2 function called." << std::endl;
 }
};
int main() {
 Base* basePtr1 = new Derived1();
 Base* basePtr2 = new Derived2();
 // 尝试将 basePtr1 转换为 Derived1*
 Derived1* derivedPtr1 = dynamic_cast<Derived1*>(basePtr1);
 if (derivedPtr1) {
 derivedPtr1->derived1Function();
 } else {
 std::cout << "Conversion to Derived1 failed." << std::endl;
 }
 // 尝试将 basePtr2 转换为 Derived1*(应该失败)
 Derived1* derivedPtr2 = dynamic_cast<Derived1*>(basePtr2);
 if (derivedPtr2) {
 derivedPtr2->derived1Function();
 } else {
 std::cout << "Conversion to Derived1 failed (as expected)." << std::endl;
 }
 // 清理内存
 delete basePtr1;
 delete basePtr2;
 return 0;
}

什么是柔性数组?有什么用处?

什么是大小端?如何用代码判断大小端?

如何定位内存泄露问题?

如何使用perf分析程序性能?

C/C++内存模型

什么是内存对齐?为什么内存要对齐?

提高C/C++程序性能的技巧?

C/C++互相调用通常在头文件中做什么处理?

static在类成员变量和类成员函数中有什么作用?

静态成员函数只能访问静态成员变量。静态成员变量在所有对象中共享。

如何实现类的单例模式?

如何判断链表是否有环?如何找到链表的中点?如何对链表排序?如何对二叉树做层序遍历?给定四个坐标如何判断是否是正方形?

如何提高TLB缓存命中率?

什么时候需要用虚函数?

什么时候需要用智能指针?

想要malloc和new时,不用显式分配内存和管理内存,就可以使用智能指针。

移动语义与完美转发

C++20协程

源文件生成可执行文件的过程

内存管理?如何避免内存碎片?

线程上下文切换会做哪些工作?

虚拟地址空间到物理地址空间的流程说一下

如何减小锁的粒度?如何避免死锁?

如何保证程序是线程安全的?

如何实现一个线程安全的延迟队列?

如何实现原子操作CAS

你技术上最大的优势是什么?你最擅长什么技术?C/C++功能实现,算法与数据结构,linux内核,操作系统,还是协作沟通,英语等?

About

C/C++ interview notes

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /