interview
cpp-basics
C++中final关键字的作用?

C++基础面试题, C++ 中 final 关键字的作用?

C++基础面试题, C++ 中 final 关键字的作用?

QA

Step 1

Q:: C++ 中 final 关键字的作用是什么?

A:: C++ 中的 final 关键字用于防止类或类的成员函数被继承或重写。final 关键字可以用于类声明中,表示该类不能被继承;也可以用于虚函数声明中,表示该函数不能在派生类中被重写。这对于防止不希望被修改的类或函数提供了额外的安全保障。

Step 2

Q:: 如何在 C++ 中使用 final 关键字?

A:: 要在 C++ 中使用 final 关键字,可以将其放置在类声明或虚函数声明的末尾。例如:

 
class Base final {
   // 类体
};
 

这表示类 Base 不能被继承。

或者:

 
class Base {
   virtual void func() final;
};
 

这表示虚函数 func() 不能被派生类重写。

Step 3

Q:: 使用 final 关键字的好处是什么?

A:: 使用 final 关键字可以显式地表示设计意图,防止继承和重写,确保类的行为不被意外修改。此外,它还可以帮助编译器进行优化,因为编译器知道没有其他类会继承或重写 final 标记的类或函数,因此可以在编译时做出更多的优化决定。

Step 4

Q:: C++ 中还有哪些类似于 final 的关键字?

A:: C++ 中与 final 类似的关键字有 override 和 virtual。override 用于表示某个虚函数是对基类虚函数的重写,它帮助编译器检测是否正确地重写了基类函数。virtual 则用于表示函数是虚函数,可以被派生类重写。

用途

在实际生产环境中,final 关键字的使用非常重要,特别是在设计库或框架时。它可以用来锁定 API 的某些部分,确保某些类或函数不会被意外修改或扩展,这有助于维护代码的稳定性和一致性。final 关键字还可以帮助开发人员传达设计意图,表明某些类或函数不应该被继承或重写,减少了代码维护中的错误风险。此外,编译器可以利用 final 进行优化,减少虚函数调用的开销,提高程序的性能。\n

相关问题

🦆
C++ 中 override 关键字的作用是什么?

override 关键字用于显式声明派生类中的某个虚函数是重写基类中的虚函数。这可以帮助编译器检查函数签名是否与基类中的虚函数一致,防止由于函数签名不匹配导致的意外错误。

🦆
C++ 中使用 final 和 override 的最佳实践是什么?

最佳实践是始终在派生类的虚函数中使用 override,以确保该函数确实在重写基类中的虚函数。另外,使用 final 来标记那些你不希望再被继承或重写的类或函数,以防止继承层次中的错误使用。

🦆
C++ 中虚函数的作用是什么?

虚函数允许在继承体系中动态绑定函数调用,也就是说,调用函数时会根据对象的实际类型(而不是指针或引用的静态类型)来决定调用哪个函数。这使得 C++ 支持多态性,这是面向对象编程的核心概念之一。

🦆
C++ 中纯虚函数和抽象类的概念是什么?

纯虚函数是没有实现的虚函数,通常用于在基类中定义接口。声明纯虚函数的方法是将函数设置为 0,例如:virtual void func() = 0;。一个类如果包含纯虚函数,就称为抽象类,抽象类不能被实例化,只能作为基类来被派生类继承。