与“抽象类”相关的TAG标签
抽象类并非以“隐藏实现细节”为核心目标,而是通过定义公共契约和复用代码来组织类的继承体系;它既可提供具体实现(concretization),也可声明抽象方法(abstraction),二者共存并不矛盾,而是面向对象设计中职责分离的体现。
抽象类必须用abstract修饰且不可实例化,可含字段、构造函数、virtual方法等;abstract方法无实现,子类须override;与接口选择取决于是否需共享状态或默认实现。
C#8.0的接口默认实现允许在接口中提供方法体,使已有实现类无需修改即可使用新方法,解决接口演化时的编译兼容问题;新类可继承或重写默认方法,支持多接口组合,但不能访问私有成员、不支持状态保存,与抽象类有本质区别。
std::any可存可复制或可移动的完整类型(如int、std::string),不能存引用、数组、抽象类、不完整类型或删除/私有拷贝构造的类型;取值应优先用指针版std::any_cast避免异常和拷贝。
GoogleMock仅支持对含纯虚函数的抽象类进行模拟,要求接口类声明虚析构函数、所有待mock函数为virtual且签名一致,使用MOCK_METHOD宏声明,EXPECT_CALL须在调用前设置并按序匹配。
虚函数是C++实现运行时多态的核心机制:基类用virtual声明,派生类用override重写,通过基类指针或引用调用时动态绑定到派生类版本;虚析构函数防止内存泄漏;纯虚函数(=0)使类成为抽象类,强制派生类实现。
C++多态必须用virtual关键字显式开启,通过虚函数表(vtable)和vptr实现运行时动态绑定;未加virtual的函数仅静态绑定,无法多态;基类析构函数须为virtual以防资源泄漏;纯虚函数定义抽象类,强制子类实现。
Go中中介者模式不用class和继承,因Go无类与继承机制;应以结构体承载协调逻辑,用函数字段或方法注入行为,同事仅弱引用中介者,避免循环依赖与过度耦合。
本文介绍如何通过模板方法模式重构多个结构相同、仅配置标识符不同的SpringBoot@Configuration类,减少代码重复,提升可维护性。
std::is_abstract_v用于编译期判断类型是否为抽象类,仅接受类型名(如MyClass),不接受指针、引用或对象实例;其结果取决于是否存在未实现的纯虚函数,cv限定符不影响判定。
