You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++是否支持类似Java的interface接口匿名实现方式?

C++ 实现类似Java匿名接口的方法

C虽然没有内置的interface关键字,但可以通过纯虚基类定义接口,完全可以实现和Java匿名内部类等效的功能,而且还有更简洁的现代C写法。

你给出的Java代码有两种常用的等效C++实现:

1. 和Java逻辑完全对齐的匿名类实现

首先定义等价于Java Runnable的接口(纯虚基类):

#include <iostream>
class Runnable {
public:
    virtual void run() = 0;
    virtual ~Runnable() = default; // 必须加虚析构避免内存泄漏
};

之后就可以用和Java几乎一致的语法做匿名实现:

Runnable* myRunnable = new Runnable() {
public:
    void run() override {
        std::cout << "Runnable running" << std::endl;
    }
};

// 调用方法
myRunnable->run();
// 用完需要手动释放内存,也可以用std::unique_ptr托管避免手动delete
delete myRunnable;

2. 现代C++更推荐的轻量实现

C++11及以上版本可以用lambda+std::function的组合,不需要提前定义接口类,写法更简单性能也更高:

#include <iostream>
#include <functional>

std::function<void()> myRunnable = []() {
    std::cout << "Runnable running" << std::endl;
};

// 直接调用即可
myRunnable();

注意事项

  • 以上两种写法都要求C版本在C11及以上,旧版本标准不支持
  • 没有强多态要求的场景优先用lambda写法,没有虚函数开销,代码更轻便
  • 用裸指针管理匿名类对象时切记手动释放内存,避免泄漏

内容的提问来源于stack exchange,提问作者T0maas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:15:02