代码集:如何编写返回值受限的函数

前言

       整理代码思路,举一反三..

引入

        前面写了一篇帖子代码集:当遇到传值受限的函数,应该如何编写-CSDN博客,讲了传入值被限制的时候如何编写函数,再深入一点分析函数的过程及补充返回值受限函数的编写.

概要

        函数的原理分析以及实现,重点在某些受限函数的编写

函数原理 

        函数是由编程语言支持,用输入值-输出值表达逻辑的代码模块.假定有输出值和输出值,不考虑无输入值,无数据变化的函数,例如:

/*不考虑以下形式函数,无输入,无逻辑*/
void fun(){
    std::cout<<"Hello"<<std::endl;
}

 考虑以下函数:

/*有输入,有输出*/
/*伪代码*/
RetType fun(ParaType1 pt1,ParaType2 pt2){
    statement;                    //语句1
    statement;                    //语句2
    return rt;                    //返回值
}

 面向过程的函数

        在面向过程的函数中,输入值的数据通道是形参列表,输出值的数据通道是形参列表和返回值类型.输入值代表逻辑中的"因",函数体内的数据变化表示"果".表示"果"的数据(输出值)可由返回值或者形参所获得.

        举个例子:写个函数表示输出值等于输入值加2.

        1.返回值接收输出值

int add_two(int original_data){
    original_data+=2;
    return original_data;
}
===============
int result=add_two(3);            //调用函数后result值为5;

        2.形参接收输出值(返回类型void) 

void add_twop(int original_data,int * result) {
	original_data += 2;
	*result=original_data;
}
========================
int result;
add_twop(10,&result);             //调用后result值12
                 

        注意:这种方法需要传入数据地址,即数据的指针常量,本例中用result接收结果,实参是&result 

        在上面两种写法的基础上,可以推导出面向过程的函数有多个输入(形参列表),和多个输出(形参列表和返回值)的写法,比如很典型的:需要告知函数执行结果,将bool类型作为返回值,其他返回值放到形参列表里.

bool add_twop(int original_data,int * result) {
	original_data += 2;
	*result=original_data;
    if(*result>10)
        return true;
    return false;
}
=======================================
bool ret;                            //声明bool型变量ret
int result;                          //声明变量,接收函数计算结果
ret=add_twop(10,&result);            //调用函数,返回结果
if(ret==true)
    cout<<"计算后的结果大于10"<<endl;
else
    cout<<"计算后的结果小于10"<<endl;

        如果输入输出的值多了,很自然想到打包成结构体(C语言)--对象不在这个范围,因为更容易. 

===========================内容分割线======================================

        更新日常认知:过去没有返回值,认为返回值类型设为void即可,现在看来void设为返回值类型还可以从形参返回. 所以输入值可以没有,但输出值一定有(没有也当成有),可以由return返回,也可以由形参返回.

===========================内容分割线===================================== 

      输入值受到限制时 

        前面的帖子代码集:当遇到传值受限的函数,应该如何编写-CSDN博客说过, 当输入值受到限制时,返回值类型可以用void或者bool来写,伪代码如下(假设输出值由形参返回)

/*伪代码,bool作返回值类型,*/
/*不在范围内的传值不会处理,返回布尔值*/
bool fun(paraType1 pt1,retType * rt){
    if(pt1在范围内){
        statement;
        return true;         //true或false自己定义
    }
    return false;            //true或false自己定义
}
====================================================
/*伪代码,void作返回值类型,*/
/*不在范围内的传值不会处理,直接return*/
void fun(paraType1 pt1,retType * rt){
    if(pt1在范围内){
        statement;
        return;             //处理数据并return
    }
    return;                 //不处理直接return
}

        假如上面写法不习惯,输出值仍由return返回

/*伪代码,T作返回值类型,*/
/*不在范围内的传值不会处理,直接return*/
T fun(paraType1 pt1){
    if(pt1在范围内){
        statement;
        return t1;          //处理数据并return一个T类型值t1.
    }
    return t2;             //不处理直接return一个T类型值t2,有辨识度
}
        输出值受限制时

        当输出值受到条件限制,使得输出值也受限时

/*伪代码,void作返回值类型,*/
/*不在范围内的传值不会处理*/
void fun(paraType1 pt1,retType * rt){
    if(pt1在范围内)
        *rt=t1;                    //输出值赋值t1
    else
        *rt=t2;                    //输出值赋值t2,有辨识度的
}

         如果编写函数时"不小心"写成了输出值用return返回时,这时可能没有相应的值输出,或者输出一个上一个值,可以使用静态局部变量来实现

/*伪代码,T作返回值类型,*/
/*不在范围内的传值不会处理,return上一次取得的值*/
T fun(paraType1 pt1){
    static T tmp;           //声明静态变量
    if(pt1在范围内){         //如果条件满足,进入这个分支
        statement;          //语句
        tmp=t1;             //return前记录下这个值  
        return t1;          //正常情况下return一个T类型值t1.
    }
    return tmp;             //如果再次调用函数,条件受限,则返回上一次的值
}

面向对象的函数 

        在类中定义的对象函数,因为可以使用类作用域内的数据,也就是可以调用其他对象函数和使用对象属性,所以"数据通道"要宽得多, 也就没有面向过程函数的那个限制:输入值的数据通道只有形参列表,输出值的数据通道有return和形参列表. 输入值和输出值直接和对象属性对接.这也是面向对象的一个优势吧

#include<iostream>
using namespace std;

class Demo {
	int age;
public:
	Demo(int ag):age(ag){}
	int get_age() const{ return age; }
	void fun() {			//无参数,但可以使用任意属性
		age++;				//无返回值,但返回给属性	
	}
};

int main(void) {
	Demo xz(30);
	xz.fun();
	int age = xz.get_age();
	cout << "小张的年龄是:" << age<<endl;
}

 小结

        函数处理数据的一些应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jllws1

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值