通过继承C++中的类来重命名类成员

Rename class members by inheriting class in C++

本文关键字:重命名 成员 继承 C++      更新时间:2023-10-16

我想"重命名"我的类ofVec4f的一些成员。

我知道这在严格的C++中是不可能的,但我可以创建一个继承自我的类的新类,并声明新成员,这些成员是别名或指向原始成员的指针吗?

我尝试了以下方法:

class ofVec4fGraph : public ofVec4f {
    public :
        float& minX;
        float& maxX;
        float& minY;
        float& maxY;
        ofVec4fGraph(float _minX,float _maxX, float _minY, float _maxY )
                    : minX(_minX), maxX(_maxX), minY(_minY), maxY(_maxY)
                    { ofVec4f(_minX, _maxX, _minY, _maxY); };
    };

我认为这可能是您想要的。

#include <iostream>
class CBase
{
public:
    CBase() : a(0), b(0), c(0) {}
    CBase(int aa, int bb, int cc) : a(aa), b(bb), c(cc) {}
    int a, b, c;
};
class CInterface
{
public:
    CInterface(CBase &b) 
    : base(b), x(b.a), y(b.b), z(b.c) 
    {
    }
    int &x, &y, &z;
private:
    CBase &base;
};
int main() 
{
    CBase      base(1, 2, 3);
    CInterface iface(base);
    std::cout << iface.x << ' ' << iface.y << ' ' << iface.z << std::endl;
    std::cout << base.a << ' ' << base.b << ' ' << base.c << std::endl;
    iface.x = 99;
    base.c = 88;
    std::cout << iface.x << ' ' << iface.y << ' ' << iface.z << std::endl;
    std::cout << base.a << ' ' << base.b << ' ' << base.c << std::endl;
    return 0;
}

您的类应该是:

class ofVec4fGraph : public ofVec4f {
public :
  float& minX;
  float& maxX;
  float& minY;
  float& maxY;
  ofVec4fGraph(float _minX,float _maxX, float _minY, float _maxY )
                    : ofVec4f(_minX, _maxX, _minY, _maxY), minX(x), maxX(y), minY(z), maxY(w)
     {};
};

构造函数链接C++中是不可能的。您可以使用初始值设定项列表来初始化基类。

您现在可以将其用作:

ofVec4fGraph obj;
fun1(obj.x, obj.y);
fun2(obj.maxX, obj.minY);
Is not à job for inherited class ? 

不一定。

适当的继承规定,只有当派生类可替换基类时,您才能公开继承。在这种情况下,根据基类实现派生类,这里首选的方法是使用私有继承,或者更好的对象组合。组合比继承好。您应该使用@Michael J描述的方法,或者使用私有继承。

class Base { protected: int x; };
class Derived: private Base { 
 public:
  int getValue(){ return x;} // name the method whatever you like.
};

还了解为什么公共数据成员的不好