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

标签 c++ inheritance

我正在为形状实现一些类。有没有办法既避免代码重复又浪费内存?

基本上,我想在基类中有一个变量,它是一个常量,每个派生类只有一个拷贝(如静态成员),但每个派生类具有不同的值。

例如,我想为派生类定义作用于惯性张量的函数;对于每个形状,惯性张量是一个常数,所以我不想为每个实例都有一个相同常数的拷贝。

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

有没有办法做到这一点?

最佳答案

在基类中使用纯虚函数,并在每个派生类中覆盖它以返回适当的值。这样您就只有常量的一个拷贝,并且每个派生类都正确地定义了它。

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; }
};

关于c++ - 如何用 const 成员和继承来避免代码重复和浪费内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054793/

相关文章:

c++ - 没有匹配的成员函数调用 'push_back' ,共享指针 vector

c# - 基类继承另一个基类?

javascript - 在Javascript中递归调用 "parent"构造函数?

OOP 哲学(摘自《Scala 编程》中的组合和继承)

C++:继承函数并重新定义它们

c++ - 在列表框中向上或向下移动项目

java - 如何通过java代码将ASCII码转换成主机二进制码?

c++ - 为什么 std::vector::insert 使插入点之后的所有迭代器失效

c++ - 在 cython 中处理默认参数

C++ 错误 C2511 : overloaded member function not found in 'Sprite'