您的位置 电脑知识爱好者 >> 编程知识 >> C++函数设计, 函数发生器的设计

C++函数设计, 函数发生器的设计

电脑知识爱好者互联网电脑知识爱好者2008-5-1 5:36:29
知识重点:C++函数设计, 函数发生器的设计 (pass by pointer)。C++ 语言中多了引用传递(pass by reference)。由于引用传递的性质象指针传递,而使用方式却象值传递,初学者常常迷惑不解,容易引起混乱..
a = b; // 如果用“值传递”,将产生一次 *this 拷贝

a = b = c; // 如果用“值传递”,将产生两次 *this 拷贝


String的相加函数operate + 的实现如下:

String operate+(const String &s1, const String &s2)

{

String temp;

delete temp.data; // temp.data是仅含‘\0’的字符串

temp.data = new char[strlen(s1.data) + strlen(s2.data) +1];

strcpy(temp.data, s1.data);

strcat(temp.data, s2.data);

return temp;

}

对于相加函数,应当用“值传递”的方式返回String对象。如果改用“引用传递”,那么函数返回值是一个指向局部对象temp的“引用”。由于temp在函数结束时被自动销毁,将导致返回的“引用”无效。例如:

c = a + b;

此时 a + b 并不返回期望值,c什么也得不到,流下了隐患。

6.3 函数内部实现的规则
不同功能的函数其内部实现各不相同,看起来似乎无法就“内部实现”达成一致的观点。但根据经验,我们可以在函数体的“入口处”和“出口处”从严把关,从而提高函数的质量。


l 【规则6-3-1】在函数体的“入口处”,对参数的有效性进行检查。

很多程序错误是由非法参数引起的,我们应该充分理解并正确使用“断言”(assert)来防止此类错误。详见6.5节“使用断言”。


l 【规则6-3-2】在函数体的“出口处”,对return语句的正确性和效率进行检查。

如果函数有返回值,那么函数的“出口处”是return语句。我们不要轻视return语句。如果return语句写得不好,函数要么出错,要么效率低下。

注意事项如下:

(1)return语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。例如

char * Func(void)

{

char str[] = “hello world”; // str的内存位于栈上

参与评论
相关内容
关于我们 | 隐私政策 | 站点地图 | 站长博客|京ICP备07025396号
添加到百度搜藏 添加到百度搜藏 电脑知识爱好者Copyright ?2006-2008版权所有 我要啦免费统计