gpt4 book ai didi

c++用新类型/类和 friend 重载构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:59 25 4
gpt4 key购买 nike

是否可以使用 friend 将已声明的结构的构造函数重载为使用新定义的结构的构造函数。例如,在下面的简单示例中,我想使用 struct B 重载 struct A 构造函数,但不修改 A.h

主要.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; };

B.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?

我知道我可以通过在 A.h 中适当放置 struct B;A(B); 来解决问题。我也想出了一种使用模板的方法,但这不是一个优雅的解决方案。并且需要修改A.h。由于我不想进入这里的原因,我不想使用这两种技术中的任何一种。我想在不修改 A.h 的情况下重载 A::A() 构造函数,更重要的是,我不想假设 #include "A.h" 的放置是可控的。我认为这就是 friend 的用途,但我不知道是否/如何让它与构造函数一起工作。

最佳答案

您不能向类中添加构造函数(或其他成员)。但是,您可以在涉及的其他类中创建转换运算符:

class B {
// ...
public:
explicit operator A() const { /* build an A object and return it */ }
};

关于c++用新类型/类和 friend 重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com