C++入门二:一些基本语法

本文介绍了C++中的缺省参数、全缺省参数和半缺省参数概念,展示了引用的便利性,以及函数重载的使用,同时提到了nullptr指针作为空指针的改进。
摘要由CSDN通过智能技术生成

一.缺省参数

       C++语法同意缺省参数的使用,即定义或声明时给一个缺省值(注:缺省值不能在定义和声明中同时出现),如果没有传值则调用缺省值(使用时一般在声明时给缺省值)(c语言也支持)

int Add(int x = 0, int y = 0) {//函数参数可以给缺省值

    return x + y;
}

struct A{
    int x = 5;//结构体变量可以给缺省值
    int y = 6;
};


int main() {
    A example;
    cout << Add(example.x, example.y) << endl;//调用结构体缺省值返回11
    cout << Add() << endl;//调用确实值返回0
    return 0;
}

       在函数这类结构中,我们可能会有多个参数,因此我们可以选择性的给函数中的参数给缺省值,因此缺省参数可以分为全缺省参数和半缺省参数。

       ①全缺省

int Example(int x = 0, int y = 0, int z = 0) {
    return x + y + z;
}
//被注释掉的表示会报错

int main() {
    int x = 1, y = 2, z = 3;
    cout << Example(x, y, z) << endl;
   
    cout << Example(x, y) << endl;
    
    cout << Example(x) << endl;
    
    cout << Example() << endl;
    
    //cout << Example(x,  ,z) << endl;//函数不允许传空
    //cout << Example(  ,y,z) << endl;//这三个都是错误的写法
    //cout << Example(x,y,  ) << endl;
    
    cout << Example(y, z) << endl;//缺省参数和传参的名字没有关系
    
    return 0;
}

注意:函数的参数不能传空,也就是选择传参时只能从前往后连续的传参。效果如下:

       

       

       ②半缺省

int Example(int x = 0, int y, int z = 0) {
    return x + y + z;
}
//被注释掉的表示会报错

int main() {
    int x = 1, y = 2, z = 3;
    cout << Example(x, y, z) << endl;
   
    cout << Example(x, y) << endl;
    
    //cout << Example(x) << endl;//传参不能自己找到没有缺省值的参数
    
    //cout << Example() << endl;//由于y没有缺省值,因此必须传参给y
    
    //cout << Example(x,  ,z) << endl;
    //cout << Example(  ,y,z) << endl;
    //cout << Example(x,y,  ) << endl;
    
    cout << Example(y, z) << endl;
    
    return 0;
}

注意:函数的参数仍然不能传空,并且如果没给缺省值必须传参。

二.引用

       在c语言的学习中,我们经常需要传址调用,此时就需要我们通过指针把参数的地址传过去,由于使用指针进行传址调用。但是使用指针进行传址调用时每次都要解引用,十分繁琐,这时候使用引用(&)就会方便很多。如下:(当然指针和引用并不相同,两者都有对方做不到的事情)

int main(){
   int a = 5;
   int &b = a;//b是a的别名
   cout << b << endl;//输出为5
   return 0;
}

       引用和指针不同,这里b可以看做a的别名,使用b就代表使用a。 

void Example(int& x) {//此时x就称做b的别名(地址相同)
    x =  1;
}

int* &Example1(int b){//此处返回的是test的地址
    int* test = (int*)malloc(sizeof(int));//语法上引用和指针不同,不能用引用接收空间
    test[0] = 1;
    return test;
}


int main() {
    int b = 0;
    Example(b);
    cout << b << endl;
    int* arr = Example1(b);//此时arr是test的别名
    cout << arr[0] << endl;
    return 0;
}

       使用引用来传址调用时,只需要用别名接收变量即可,函数内也不需要解引用,同时传参还不需要取地址,同样引用也可以对返回值来使用。

三.函数重载

       在C语言的学习中我们知道函数名不能相同,否则就会重载错误,如果一类函数结构和功能相似,但是它们名字不能相同,这样既不方便阅读,使用起来还麻烦。C++中对其进行了优化,允许函数重载,即参数个数 or 类型 or 类型顺序不同时,允许函数名相同。使用方式如下:

void Swap(int &a,int &b) {
    int tmp = a;
    a = b;
    b = tmp;
}

void Swap(double &a, double &b) {
    double tmp = a;
    a = b;
    b = tmp;
}

void Swap(char &a, char &b) {
    char tmp = a;
    a = b;
    b = tmp;
}

int main() {
    int a = 1;
    int b = 2;
    Swap(a, b);
    cout << a << ' ' << b << endl;
    char c = 'a';
    char d = 'b';
    Swap(c, d);
    cout << c << ' ' << d << endl;
    double e = 2.5;
    double f = 1.1;
    Swap(e, f);
    cout << e << ' ' << f << endl;
    return 0;
}

四.nullptr指针

        在c语言的中我们置空指针用的是NULL,它类似于NULL宏定义为(int类型)0。

//NULL指针 -> #define NULL 0
void Example()
{
int* p1 = NULL;
int* p2 = 0;
// ……
}

        因此在使用空值的指针时,都不可避免的会遇到一些麻烦,如下所示:

void f(int)
{
 cout<<"f(int)"<<endl;
}
void f(int*)
{
 cout<<"f(int*)"<<endl;
}
int main()
{
 f(0);
 f(NULL);
 f((int*)NULL);
 return 0;
}

        程序本意是想通过 f(NULL) 调用指针版本的 f(int*) 函数,但是由于 NULL被定义成0 ,调用函数 f 时调用了 f(int) 而不是f(int*),这有悖程序的初衷。因此C++中我们一般使用nullptr来置空。
void Example()
{
int* p1 = nullptr;
// ……
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值