Rename class members by inheriting class in C++

我的梦境 提交于 2019-12-05 07:05:04
Mohit Jain

Your class should be:

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

};

Constructor chaining is not possible in C++. You use initializer list to initialize base class.

You can now use this as:

ofVec4fGraph obj;
fun1(obj.x, obj.y);
fun2(obj.maxX, obj.minY);

I think this may be what you want.

#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;
}
Rakib
Is not à job for inherited class ? 

Not necessarily.

Proper Inheritance dictates that you only inherit publicly when the derived class is substitutable for base class. In this case you are implementing derived class in terms of base class, here the preferred approach is to use private inheritance, or yet better object composition. And composition is better than inheritance. You should either use the approach described by @Michael J, or use private inheritance.

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

Also learn why public data member is bad

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!