cod*_*imp 1 c++ constructor overloading friend
无论如何使用friend使用新定义的结构重载已经声明的struct的构造函数.例如,在下面的简单示例中,我想struct A使用一个使用struct B,但不修改Ah来重载构造函数.
main.cpp中
#include "A.h"
#include "B.h"
int main() {
B x(2);
A y(B);
};
Run Code Online (Sandbox Code Playgroud)
啊
struct A {
float a;
A(float);
};
A::A(float f) { a=f; };
Run Code Online (Sandbox Code Playgroud)
BH
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?
Run Code Online (Sandbox Code Playgroud)
我知道我可以用适当的安置解决的问题struct B;,并A(B);在中阿.我还想出了一种使用模板的方法,但它并不是一个优雅的解决方案.它需要修改啊.由于我不想进入这里的原因,我不想采用这些技术中的任何一种.我想重载A :: A()构造函数而不修改Ah,更重要的是,不假设放置#include "A.h"是可控的.我认为这是朋友的用途,但我不知道是否/如何使它与构造函数一起工作.
您不能将构造函数(或其他成员)添加到类中.但是,您可以在涉及的其他类中创建转换运算符:
class B {
// ...
public:
explicit operator A() const { /* build an A object and return it */ }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |