代码集:当遇到传值受限的函数,应该如何编写

前言

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

引入

        有如下场景:给形参传值,但不是所有的值都能传

        例如:有一张表,记录了学校里六个年级中每个年级的学生人数.编写一个查询函数,int findNumber(int grade);因为int的范围很大,而只需要传入1~6这6个数.

变量回顾

        变量是一个代号,需要传入变量的地方,可以传入任意一个值(常量).

int findNumber(int grade)

 例如这里的变量类型是int,可以给grade传入的值范围在负21亿多到21亿多.

解决思路

        1:在调用端限制输入

        输入的数字变量限制在grade>=1或者grade<=6之间

int grade;
while(!(cin>>grade)||grade<1||grade>6){
    cout<<"请输入1到6的数字"<<endl;
    while(cin.get()!='\n');        //吸收回车符
}
        2:不需要返回值时,用bool类型做返回值

        ----类对象函数有个特点:返回值可以直接写入属性.所以函数可以不用返回值.

              以模板类栈为例,入栈push和出栈pop 

//伪代码
bool push(T& t){
    if(t不在范围之内)
        return false;
    etc;
    return true;
}

//伪代码
bool pop(){
    if(不能弹出,如数据结构中元素个数为0)
        return false;
    etc;
    return true;
}
        3:需要返回值时,返回值类型用指针 

        思路是指针是可以赋值0(或者nullptr)的. 

        以查表为例

int * findNumber(int *result,int grade){
    if(grade<1||grade>6)
        return 0;                        //返回空指针,函数结束;
    //下一行伪代码
    *result=根据grade取到的人数;          //得到值
    return result;                       //返回指针
}

============以下为调用函数================
int result;
int *p=findNumber(&result,3);        //假设查询3年级人数

//执行完以后result存储查询到的人数,p是指向result的指针
       4:需要返回值时,把返回值放进形参里,返回值类型用bool

        说明:上一种写法的简化形式         

bool findNumber(int *result,int grade){
    if(grade<1||grade>6)
        return false;                        
    //下一行伪代码
    *result=根据grade取到的人数;          
    return true;                       
}

============以下为调用函数================
int result;
findNumber(&result,3);        //假设查询3年级人数

//执行完以后result存储查询到的人数
//返回值可用作判断,这里没使用

        注意:这里需要的返回值result是整型,所以传入整型指针(引用也可以)

        当需要的返回值类型是指针时,形参类型应为双重指针int **.

几种方法比较

        函数是作为"黑盒"存在的,调用函数方不需要明白里面发生了什么.所以给调用函数方增加限制是不太友好的.因此方法3,4比方法1好.方法2因为在类中的方法,灵活度大一些,类作用域的数据可以随便用. 方法3和方法4比较,方法4更简洁易懂,所以推荐方法4

小结

        传值受限函数的编写思路

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jllws1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值