一、默认参数
默认参数:在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;
}
运行结果:
注:本文章仅为学习路线中感悟,有错误之处还请指出!