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

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

a870396126
a870396126 你的意思和楼上的那个人的意思一样 但是我的问题也是一样 封装函数后就会变成两个函数了 以后写出来的函数多了后很容易发生命名冲突的
大约 3 年之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
python 内嵌C函数
安装python-devel.x86_64 # yum install python-devel.x86_64    测试用c程序 #include "/usr/include/python2.7/Python.h"int add(int a, int b){ return a + b; }PyObject* wrap_add(PyObject* self, PyObject* args
C语言结构体内嵌函数指针
/* .c文件声明:1、关于结构体定义以及初始化的注意事项。 2、关于C语言结构体内嵌函数指针实现面向对象。 对于一个结构体 struct a  { int b; int c; }; //结构体定义后需要加分号。 结构体初始化方式: 1、struct a a1 = { 1, 2}; 2、struct a a1 = { .b = 1, .c = 2 }; 3、s
python中嵌入C运行时函数
详细的文档看这里:https://docs.python.org/3.6/library/ctypes.html?highlight=ctypes#module-ctypes 需要注意的是文档中提到的几点: cdll 中的C函数的调用约定是cdecl 的,windll 中的C函数的调用约定是stdcall 的,Windows API专用。 1、Note Accessing
结构体内嵌函数指针解析
结构体内嵌函数指针的定义 typedef struct Factory_s{//结构体内嵌函数指针 int (*init)(void);//函数指针 int (*produce)(int num); int (*consume)(int num); }Factory; 结构体内嵌函数指针的初始化 Factory factory={//结构体初始化 .init=a...
make内嵌函数详解
make内嵌函数详解 make内嵌函数详解 make内嵌函数详解
C++与C#对比学习:内联函数,匿名函数
为啥用内联函数(inline functions)      在C++中函数调用需要建立栈环境,进行参数复制,保护调用现场,返回时进行返回值复制,恢复调用现场.这些操作都需要额外开销.那有啥好办法避免频繁的函数调用呢,   首先想到的可能是把函数中的代码直接拿来用,而不用先在某处弄个函数,然后再去调用,当然也只是函数比较简单时可行.但如果多处用到那函数的话,你全部替换会使得代码冗余,可读性下
C#读取嵌入资源(程序集清单资源)
1、添加嵌入的资源
winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)
C#winform 窗体与Webbrowser控件的相互交互
C编写NextDate函数
该函数实现以下功能: 1.输入日期合法(如1993,1,5),输出下一天的日期; 2.输入日期年月日超出范围(如2004,11,32),输出‘无效输入日期’; 3.输入日期年月日均合法,但组合错误(主要指日错误如2011,2,29), 输出'日期组合错误'. 规定年为:1812<=年<=2012
使用纯C在自己的窗口中嵌入HTML控件
使用纯C在自己的窗口中嵌入HTML控件 2010-04-09 11:56 1087人阅读 评论(0) 收藏 举报 htmlc浏览器webbrowserdll磁盘 标 题: 【翻译】过年了,献上小礼 - 使用纯C在自己的窗口中嵌入HTML控件 作 者: xiep 时 间: 2010-01-22,13:42:29 链 接: http://bbs.pediy.com/show