无论如何,有没有friend
一种方法可以使使用新定义的结构的已声明结构的构造函数重载。例如,在下面的简单示例中,我想struct A
使用BUT重载一个构造函数struct B
,而不修改Ah。
main.cpp
#include "A.h"
#include "B.h"
int main() {
B x(2);
A y(B);
};
啊
struct A {
float a;
A(float);
};
A::A(float f) { a=f; };
h
struct B {
float b;
B(float);
B(A);
};
B::B(float f) { b=f; };
B::B(A s) { b=s.a; };
A::A(B s){ a=s.b; };
// ^^^----obviously error since A(B) is not declared,
// but how can I make this work without changing A.h?
我知道我可以用适当的安置解决的问题struct B;
,并A(B);
在中阿。我还想出了一种使用模板的方法,但这不是一个很好的解决方案。并且它需要对Ah进行修改。由于某些原因,我不想进入这里,我不想使用这两种技术。我想重载A :: A()构造函数而不修改Ah,更重要的是,不假设的放置是#include "A.h"
可控制的。我认为这是朋友的目的,但是我不知道是否/如何使其与构造函数一起使用。
您不能将构造函数(或其他成员)添加到类中。但是,您可以在涉及的其他类中创建转换运算符:
class B {
// ...
public:
explicit operator A() const { /* build an A object and return it */ }
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句