使用final关键字是防止C++类被继承的推荐方法,语义清晰且由编译器强制执行;也可将构造函数设为私有并配合友元实现,但可读性和安全性较差;高安全场景下可结合final与私有构造函数,如单例或工具类设计。

在C++中,防止类被继承可以通过将构造函数设为私有或使用final关键字来实现。最常用且推荐的方法是使用final说明符,它明确表达设计意图,并由编译器强制执行。
使用 final 关键字禁止继承
C++11 引入了 final 关键字,可以用于类定义,表示该类不能被继承。
只需在类名后加上 final 即可:
class Base final {public: Base() = default; void doSomething() {}};// 下面这行代码会编译错误class Derived : public Base { }; // 错误:Base 是 final 类,不可继承
这是最直接、清晰的方式,能有效阻止其他类从该类派生。
立即学习“C++免费学习笔记(深入)”;
将构造函数设为私有(配合友元)
如果不想使用 final,还可以通过将构造函数设为私有来阻止派生类的实例化。因为派生类在构造时需要调用基类的构造函数,若无法访问则无法完成构造。
示例:
class NonInheritable {private: NonInheritable() = default;public: static NonInheritable create() { return NonInheritable(); } void doWork() {} friend class AllowedDerived; // 如果有特定类需要继承,可用友元配合};
这种方式虽然能阻止大多数情况下的继承,但不够直观,且若存在友元类,仍可能被“绕过”。
结合 final 和私有构造函数(更严格控制)
在某些高安全或框架设计场景中,可以同时使用 final 和私有构造函数,确保类既不能被继承,也不能被外部直接构造(除非提供工厂方法)。
例如:
class StrictFinal final {private: StrictFinal() = default;public: static StrictFinal getInstance() { return StrictFinal(); }};
这种设计常用于单例或工具类,兼顾了不可继承和受控实例化的需求。
基本上就这些方法。推荐优先使用 final,语义清晰,编译器检查严格,代码可读性强。
以上就是c++++中如何防止类被继承_c++禁止类继承的方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477350.html
微信扫一扫
支付宝扫一扫