2 a870396126 a870396126 于 2015.06.15 17:22 提问

C++/C#的函数内嵌问题

int a()
{
int c=1;
int d=2;
int e=3;
return c+d+e;
}
int b()
{
int c=a();
int d=a();
int e=a();
}
上面是简单例子 函数a里有很多对象,函数b里也有很多对象与a重复,
假设这种情况不可避免,对象有很多修改很不方便。
现在我想调用函数b,却发现调用函数b必须调用函数a,
于是我想把函数a整合到函数b里面去,这样我以后只需要调用一个函数就行了
因为如果我调用函数b时的函数b需要调用很多个函数或者重复调用函数
那么就不好整合函数b了

不知道有没有看懂我的意思

3个回答

ycg514230
ycg514230   Rxr 2015.06.15 17:28
已采纳

不明白你为什么要这样做,现代程序设计,为了更好维护系统,通常会把多次调用相同的代码
提炼成一个函数,用微小的性能损失换取代码的可维护性。
所以你这样反着来是不符合常理的,当然如果这段代码只执行了一两次是可以把他从函数里面
整合到调用的地方,但是一个函数最好不要超过100行。

希望能帮到你。

a870396126
a870396126 我重新问了个问题 http://ask.csdn.net/questions/189161 可以帮我看看吗 这么小的代码分开好还是合并了好 还是无所谓的
2 年多之前 回复
a870396126
a870396126 哦 这样啊 算啦 我还是使用头文件这些方法吧 目前这个不是问题 采纳你啦
2 年多之前 回复
a870396126
a870396126 当然这段代码是错误的
2 年多之前 回复
ycg514230
ycg514230 回复a870396126: 你说的是匿名函数,c++11应该不支持,java是支持的,c#不清楚,可能支持。
2 年多之前 回复
a870396126
a870396126 我是指能够像命名空间一样套嵌吗 void a() { void b() {} } 比如这样的
2 年多之前 回复
ycg514230
ycg514230 回复a870396126: 恩,如果是练习的话,那就随便啦
2 年多之前 回复
a870396126
a870396126 我的想法能够实现吗
2 年多之前 回复
a870396126
a870396126 我明白你的意思了 但是不是我目前需要的 因为如果使用class 或者namespace或者你说的DLL或者头文件都可以 但是我在练习到这中代码时候脑洞大开 想在函数b内内嵌函数a 类似于命名空间可以套嵌另一个命名空间一样的
2 年多之前 回复
ycg514230
ycg514230 回复a870396126: 重名可以使用命名空间解决,也可以把a函数设置成本地函数,这样本地函数就只在本文件内生效。
2 年多之前 回复
ycg514230
ycg514230 回复a870396126: 明白你的意思了,如果在C++的话,根本不用担心的,把函数声明放在.h文件,使用的地方include就可以了,不用copy代码。甚至可以把a和b做成dll,其他地方使用的时候直接调用dll里面的函数即可,不用copy代码。
2 年多之前 回复
a870396126
a870396126 话会很麻烦的 很容易发生函数a的名字与其它函数的名字重复 我不知道这个怎么说 我想把这些代码打包一下
2 年多之前 回复
a870396126
a870396126 我正是你这个意思 但是这样的话我以后需要函数b时候总是得把函数a也一同复制进去 如果有多个不同的函数a呢 这样
2 年多之前 回复
bulusli3
bulusli3   Ds   Rxr 2015.06.15 17:42

函数a最好不要放在函数b里面去,函数a就是一个独立的功能,如果函数b里面多次调用到函数a,你觉得不好看的话,可以把b里面一部分相同的代码再次封装成一个函数,在b里面进行调用。

a870396126
a870396126 你的意思和楼上的那个人的意思一样 但是我的问题也是一样 封装函数后就会变成两个函数了 以后写出来的函数多了后很容易发生命名冲突的
2 年多之前 回复
zhi_ai_yaya
zhi_ai_yaya   Rxr 2015.06.15 18:49

用C#里面的内部类,用internal关键字把访问权限控制在同一程序集文件里面。实现类似java的内部类的效果。这样可以解决命名冲突的问题。

class ClassB
{
void b()
{
int c=ClassA.a();
}
internal class ClassA
{
public static void a();
}

}

Csdn user default icon
上传中...
上传图片
插入图片