C++之函数默认参数、参数占位符、构造函数接收参数值

一、默认参数

        默认参数:在c++函数定义的时候,可以设置默认参数,作为参数的值初始化,如果设置了函数参数的默认值,则在调用函数的时候,已经设置了函数参数默认值的位置可以不进行传参操作,如果没有传参,则按照默认参数值执行。

        格式:返回值 函数名(数据类型 参数名 = 默认参数值,数据类型 参数名 = 默认参数值...)

                {

                        }

                   返回值 函数名(数据类型 参数名,数据类型 参数名 = 默认参数值...)

                {

                        }

        但是设置函数默认参数有需要注意的几点:

        1、注意点1例子如下:

#引用库
void test(int a = 10,int b = 20){
std::cout<<a<<b<<std::endl;
}

main(){
test();
test(2);
test(2,3);
}

        上例中test函数参数a和b的默认值为10和20,如果在调用的时候不进行传参的话,则test中的形参默认为a=10,b=20。如果传入参数为一个,则默认传入的值为第一个参数的赋值,如上例中的test(2);,则默认为a=2,b=20;如果传入的参数值个数为函数参数的个数,则默认参数值无效,按照传入的赋值进行执行函数,如上例中的test(2,3);则原函数的默认参数值a=10,b=20无效,按照a=2,b=3执行。 

        2、注意点2例子如下:

#引用库
void test1(int a = 10,int b){
std::cout<<a<<b<<std::endl;
}

void test2(int a,int b = 20){
std::cout<<a<<b<<std::endl;
}

main(){
//操作
}

       上例中test1函数和test2函数的区别就是,在设置默认参数值时, 一个设置的是第一个参数一个设置的是第二个参数,但是哪一个正确呢?其实是第二个正确,在设置默认参数的时候,有一个要求:如果一个函数形参设置了默认值,它前面的形参可以不设置默认值,但是后面的所有形参都要设置默认值。

         3、注意点3例子如下:

#引用库
void test1(int a = 10,int b = 20);
void test1(int a = 10,int b = 20){
std::cout<<a+b<<endl;
}
void test2(int a = 10,int b = 20);
void test2(int a,int b){
std::cout<<a+b<<endl;
}

void test3(int a,int b);
void test3(int a = 10,int b = 20){
std::cout<<a+b<<endl;
}
main(){
//操作
}

        上例中,test1,test2,test3函数到底哪个是正确的呢?test2和test3是正确的,在设置默认参数时,如果函数的声明和定义是分开编写,那么声明和定义时,只能有一个部分进行默认参数设置,像上例中的test1在声明和定义的时候都进行了函数默认参数的设置,这种操作是不允许的。


 二、参数占位符

        在函数定义时,形参可以没有名称只有数据类型,这样的参数叫做参数占位符,而且函数参数占位符也可以进行参数默认值的设置。

        格式:返回值 函数名(数据类型 参数名1,数据类型){

                        }//不进行参数默认值设置的参数占位符

                   返回值 函数名(数据类型 参数名1,数据类型 = 默认参数值){

                        }//进行参数默认值设置的参数占位符

        如下例:

#引用库

void test2(int a = 10,int = 20);
void test2(int a,int){
std::cout<<a<<endl;
}

void test3(int a,int);
void test3(int a = 10,int){
std::cout<<a<<endl;
}
main(){
//操作
}

        上例中,test2中的第二个形参为参数占位符,其中占位符进行了参数默认值的设置。test3中也使用了参数占位符,但是没有进行默认值的设置。


三、构造函数接收参数值

        在构造函数编写时,可以进行简便写法,如下例:构造函数一和构造函数二的功能是相同的,这个是另一种方法进行构造函数赋值操作。当然也适用于给成员函数传值的其他函数。

#引用库
Class Person{
private:
    int m_age;
    int m_height;
public:
//构造函数一
    Person(int age,int height){
    m_age = age;
    m_height = height;    
    }
//构造函数二
 Person(int age,int height):m_age(age),m_height(height)
{
      
    }


}

示例代码:

#include <iostream>
#include <stdio.h>

using namespace std;
class Person{
private:
    int m_age;
    int m_height;
public:
    Person();
    Person(int age, int height):m_age(age),m_height(height){};
    ~Person(){};
    void setm_age(int age) 
    {
         m_age = age;
         }
    int getm_age(){
    return m_age;
    }
   void  setm_height(int height){
        m_height = height;
    }
    int getm_height(){
        return m_height;
    }
};

void test(int a,int b = 20){
    cout<<"a ="<<a<<" b = "<<b<<endl;
}
void test1(int a = 10,int b = 20){
    cout<<"a ="<<a<<" b = "<<b<<endl;
}


int main(int argc, char *argv[])
{
    test(1);
    test(1,2);
    test1(1);
    test1(1,2);
    test1();
    Person person(10,20);
    cout<<"person.age = "<<person.getm_age()<<endl;
    cout<<"person.height = "<<person.getm_height()<<endl;
    return 0;
}

运行结果:

注:本文章仅为学习路线中感悟,有错误之处还请指出!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农永闯天涯

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值