C++ 如何在不重写函数的情况下向lib类添加函数

C++ 如何在不重写函数的情况下向lib类添加函数,c++,overriding,C++,Overriding,我有一个例子,我需要在VR项目中使用的游戏引擎类中添加一些函数,而不重写它自己的类: 引擎类名称是AnnwaynPlayer,其中包含许多有用的方法来控制播放器,现在我正处于联网阶段,所以我需要向这个lib类添加两个额外的方法,它们是setActive()和setConnected(),最好的方法是什么 如果不能接触类本身,则可能需要使用继承。这是面向对象编程的主要目标之一——能够添加/更改现有类的行为而不改变它。所以你想要的是: class MyAnnwaynPlayer : public A

我有一个例子,我需要在VR项目中使用的游戏引擎类中添加一些函数,而不重写它自己的类:


引擎类名称是
AnnwaynPlayer
,其中包含许多有用的方法来控制播放器,现在我正处于联网阶段,所以我需要向这个lib类添加两个额外的方法,它们是
setActive()
setConnected()
,最好的方法是什么

如果不能接触类本身,则可能需要使用继承。这是面向对象编程的主要目标之一——能够添加/更改现有类的行为而不改变它。所以你想要的是:

class MyAnnwaynPlayer : public AnnwaynPlayer {
public:
    void setActive();
    void setConnected();
    // ...
}

现在,如果
AnnwaynPlayer
有一个
virtual
析构函数,事情就会好起来。如果没有,并且您的
MyAnnwaynPlayer
类有一个非平凡的析构函数,那么您必须小心通过基类
AnnwaynPlayer
的指针(无论是原始的还是智能的)使用
MyAnnwaynPlayer
的实例。当删除该类型的指针时,它将不会通过调用
MyAnnwaynPlayer
destructor链接。

如果不能触及类本身,则可能需要使用继承。这是面向对象编程的主要目标之一——能够添加/更改现有类的行为而不改变它。所以你想要的是:

class MyAnnwaynPlayer : public AnnwaynPlayer {
public:
    void setActive();
    void setConnected();
    // ...
}
现在,如果
AnnwaynPlayer
有一个
virtual
析构函数,事情就会好起来。如果没有,并且您的
MyAnnwaynPlayer
类有一个非平凡的析构函数,那么您必须小心通过基类
AnnwaynPlayer
的指针(无论是原始的还是智能的)使用
MyAnnwaynPlayer
的实例。当一个类型的指针被删除时,它将不会链接到您的“代码> MyNaveNoPv.< /C>BaseTror”的调用。

也考虑如果您只需要访问基类的公共API。它比继承更安全,因为在实现返回最终未指定的内容(如内部派生类)的情况下,您不一定知道从哪个类继承

本质上,这看起来是这样的:

namespace AnnwaynNamespace {
void setActive(AnnwaynPlayer& p);
void setConnected(AnnwaynPlayer& p);
};
您可以使用这些函数(或名称空间)调用它们,而无需
,因为ADL

void wherever(AnnwaynNamespace::AnnwaynPlayer& p) {
    setActive(p);
}
< > >代码> SETActudio等,成为该类的实际公共API的一部分,不涉及任何继承。

也考虑如果您只需要访问基类的公共API。它比继承更安全,因为在实现返回最终未指定的内容(如内部派生类)的情况下,您不一定知道从哪个类继承

本质上,这看起来是这样的:

namespace AnnwaynNamespace {
void setActive(AnnwaynPlayer& p);
void setConnected(AnnwaynPlayer& p);
};
您可以使用这些函数(或名称空间)调用它们,而无需
,因为ADL

void wherever(AnnwaynNamespace::AnnwaynPlayer& p) {
    setActive(p);
}

因此,
setActive
等成为类的实际公共API的一部分,而不涉及任何继承。

子分类可能是一个选项子分类可能是一个选项这是我需要的,thx帮助:D,现在我只需要调用MyAnnwaynPlayer,就可以用我的额外方法使用anwaynPlayer中的所有内容:D这是我需要的,谢谢帮助:D,所以现在我只需要调用MyAnnwaynPlayer,就可以用我的额外方法使用anwaynPlayer中的所有内容:D