我想“重命名”我班上的一些成员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); };
};
答案 0 :(得分:5)
我认为这可能就是你想要的。
#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;
}
答案 1 :(得分:4)
你的课应该是:
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);
答案 2 :(得分:0)
Is not à job for inherited class ?
不一定。
Proper Inheritance表示当派生类可替代基类时,您只能继承公开。在这种情况下,您根据基类实现派生类,此处首选方法是使用private inheritance,或更好object composition。并且composition is better than inheritance。您应该使用@Michael J描述的方法,或使用私有继承。
class Base { protected: int x; };
class Derived: private Base {
public:
int getValue(){ return x;} // name the method whatever you like.
};