通过继承C++中的类来重命名类成员
Rename class members by inheriting class in C++
我想"重命名"我的类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.
};
还了解为什么公共数据成员的不好
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 通过重命名C++中的符号来减小二进制大小
- 如何以与 API 兼容的方式重命名类成员?
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 在Qt中复制,剪切,粘贴,重命名,撤消和重做
- 重命名 win32api 函数以进行混淆
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 如何在重命名函数 (c++) 中使用变量?
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 以编程方式防止重命名或删除文件,但仍使其可写
- C++:重命名dll和lib并链接
- 使用 stdio.h 重新定位和重命名文件C++
- C++ Qt5 QDir重命名返回错误
- C++提升 ptree 重命名键
- 如何检测哪些进程更改,重命名或创建文件?
- 禁用/重命名从主机环境导入"env"
- 我可以使用std::pair,但是重命名.first和.second成员名吗?
- c++重命名类成员有什么想法吗?
- 通过继承C++中的类来重命名类成员
- 你能在使用typedef时重命名成员吗