如何避免代码重复和使用const成员和继承浪费内存?

Gui*_*dio 2 c++ inheritance

我正在实现一些形状类.有没有办法避免代码重复和同时浪费内存?

基本上,我希望基类中的变量是一个常量,每个派生类只有一个副本(如静态成员),但每个派生类的值不同.

例如,我想定义适用于派生类的惯性张量的函数; 对于每个形状,惯性张量是一个常数,所以我不希望每个实例都有一个相同常量的副本.

但是,我不是声明相同的变量并为每个派生类定义相同的函数,而是想在基类中声明一个变量,并在基类中也有一个泛型函数,比如改变惯性张量来自世界到当地坐标,反之亦然.

有办法实现吗?

Mar*_*k B 8

在基类中使用纯虚函数,并在每个派生类中重写它以返回适当的值.这样,您只有一个常量副本,并且每个派生类都正确定义它.

class Base
{
public:
    virtual int get_constant0() const = 0;
};

class Derived0 : public Base
{
public:
    virtual int get_constant0() const { return 5; }
};

class Derived1 : public Base
{
public:
    virtual int get_constant0() const { return 42; }
};
Run Code Online (Sandbox Code Playgroud)