1.8 C/C++ 虚函数 && 并行
一、纯虚函数是什么
形式:virtual 返回类型 虚函数名(形参表)= 0;
含有虚函数的类会变成抽象类,该类只能被继承而不能被实例化对象。纯虚函数永远不会被调用,主要是用来统一管理子对象。
二、什么函数不能被声明为虚函数
- 普通函数;
- 静态成员函数;
- 内联成员函数(内联函数是为了减少调用代价,而虚函数是为了多态,这两者之间矛盾,并且内联函数在编译的时候就已经展开);
- 构造函数;
- 友元函数
三、C++中如何阻止一个类被实例化?
将类的成员函数写成纯虚函数,变成抽象类。
四、std::thread
(1)基本用法
1)创建线程:通过函数、Lambda 或成员函数创建线程:
关键点:
线程在构造时立即开始执行(无需手动启动)。
必须调用 join()或 detach(),否则程序终止时可能崩溃(std::terminate)。
#include <iostream>
#include <thread>
// 普通函数
void hello() {
std::cout << "Hello from thread!\n";
}
// 带参数的函数
void print_num(int num) {
std::cout << "Number: " << num << "\n";
}
int main() {
// 方式1:绑定普通函数
std::thread t1(hello);
// 方式2:绑定带参数的函数
std::thread t2(print_num, 42);
// 方式3:Lambda 表达式
std::thread t3([]() {
std::cout << "Lambda thread!\n";
});
// 等待线程结束
t1.join();
t2.join();
t3.join();
return 0;
}
2)线程的 join()和 detach()
方法 |
作用 |
注意事项 |
|
阻塞当前线程,直到目标线程执行完毕 |
必须调用,否则可能导致资源泄漏 |
|
分离线程,使其在后台独立运行(无法再控制) |
分离后无法再 |
(2)线程传参
1)值传递 vs. 引用传递
值传递:参数被拷贝到线程的栈中(默
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++/嵌入式开发 秋招面经 文章被收录于专栏
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。
查看9道真题和解析