c++ - 向其他文件中的现有 C++ 类添加方法

标签 c++

是否可以在 C++ 中在不同的源文件中扩展一个类(添加一个方法),而无需编辑编写该类的原始源文件?

在 obj-c 中可以通过编写另一个 @interface AbcClass (ExtCategory) ... @end

当我尝试这样的事情时遇到编译时错误:

//Abc.h
class Abc {            //This class is from a 3rd party library....
                       //  ...I don't want to edit its source file.
    void methodOne();
    void methodTwo();

}


//Abc+Ext.h
class Abc {       // ERROR: Redefinition of 'Abc'
    void methodAdded();
}

我的目标是保留“Abc”名称并向其添加方法。我使用的第 3 方库中的特定类缺少一些方法,我想添加这些方法,但我未编辑源文件。

有没有办法做到这一点?我是编写 C++ 代码的新手。我熟悉它的一些语法,但了解不多。

最佳答案

没有。这种类扩展在 C++ 中是不可能的。但是您可以从原始源文件继承一个类并在源文件中添加新功能。

//Abc.h
class Abc {
    void methodOne();
    void methodTwo();
};


//Abc+Ext.h
class AbcExt : public Abc {       
    void methodAdded();
};

然后你可以调用如下方法:

std::unique_ptr<AbcExt> obj = std::make_unique<AbcExt>();
obj->methodOne(); // by the virtue of base class
obj->methodAdded(); // by the virtue of derived class

关于c++ - 向其他文件中的现有 C++ 类添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18804402/

相关文章:

c++ - 绘制图像的最简单方法?

c++ std::enable_if .... 否则?

c++ - 如何在我的 OpenGL 应用程序中实现准确(但可变)的 FPS 限制/上限?

c++ - 如何将模板类限制为仅具有类型别名的特定专业

c++ - 我不知道如何打印数组,反过来,我也不知道如何交换数组中的元素

c++ - 具有较少关键点的单应矩阵和图像变换

c++ - 使用 QObject 属性的指针

c++ - 编码是否影响 strstr() (及相关函数)的结果

c++ - 从常量成员函数返回迭代器

c++ - gnuplot: multimap 缩放