C++;如何将参数传递给嵌套函数中的一个? 假设我有一个简单的C++程序。 Function_C() { /*pass;*/ } Function_B() { Function_C(); } Function_A() { Function_B(); } int main() { int x,y; std::cin >> x >> y; Function_A(); }

C++;如何将参数传递给嵌套函数中的一个? 假设我有一个简单的C++程序。 Function_C() { /*pass;*/ } Function_B() { Function_C(); } Function_A() { Function_B(); } int main() { int x,y; std::cin >> x >> y; Function_A(); },c++,function,C++,Function,问题是:如果我想在函数中使用输入x和y (假设进行比较),我需要将x和y传递给函数A,然后传递给函数B,最后传递给函数C,这使得我可以将参数添加到函数A和函数B,仅仅因为函数C。这似乎是错误的代码:( 那么,什么样的堆栈溢出器,有谁能提供更好的主意吗?这不一定是坏代码——甚至还有一个名字在某种程度上使模式合法化:从上面进行参数化。(承认@Paul Evans)。而且它优于使用全局变量 面向对象编程可以避免这种情况。一种基于公式的解决方案 struct Foo { int x; i

问题是:如果我想在
函数中使用输入
x
y
(假设进行比较),我需要将
x
y
传递给
函数A
,然后传递给
函数B
,最后传递给
函数C
,这使得我可以将参数添加到
函数A
函数B
,仅仅因为
函数C
。这似乎是错误的代码:(


那么,什么样的堆栈溢出器,有谁能提供更好的主意吗?

这不一定是坏代码——甚至还有一个名字在某种程度上使模式合法化:从上面进行参数化。(承认@Paul Evans)。而且它优于使用全局变量

面向对象编程可以避免这种情况。一种基于公式的解决方案

struct Foo
{
    int x;
    int y;
    void Function_C(){/*use x and y*/}
    void Function_B(){Function_C();}
    void Function_A(){Function_B();}
};

int main(){
    int x,y;
    std::cin >> x >> y;
    Foo f{x, y};
    f.Function_A();
}

可能扩展得更好。

这可能是你想要做的,这是一种从上面称为参数化的模式。当然,你要避免的是给出
x
y
全局范围。

不,这是实现的方法。你可以问自己为什么
函数B
会调用
函数C
如果它对
x
y
@Shawn Xu一无所知,那么坏代码的原因是函数C需要两个参数,而函数B不处理这些参数。因此这只是一个坏设计。读取x和y的主代码应该在函数B中。也就是说,设计在逻辑上不一致。您可以通过以下方式更改函数序列调用:function_A();function_C();函数B不应该调用函数C。如果您想要快速修复,只需更改x和y的范围,使它们对模块是静态的,这样模块中的所有函数都可以看到它们。您认为
pass;
有什么作用?发布实际编译的代码通常被认为是礼貌的,但这不会。(如果你真的定义了一个名为“代码> PASS < C++代码>的虚拟变量,你可以在没有OP表达式的情况下使用它,请……不要这样。”?无论如何,不必投票,只要说这是我的答案:)。。。然后,对象是一种上下文,用于实现这一小撮函数。我可以看到缩放问题,但这在简单的情况下看起来很好。可以将
struct
用作功能块而不赋予它实际意义吗?@Shawnsu:如果它的意义在几个月后就不明显,那么应该充分记录它。但是用一个类来解决这类问题没有什么错。你知道我做了什么吗