zoukankan      html  css  js  c++  java
  • C++入门学习_01

    C++基础学习_01

    基础知识:1.命名空间,2.IO流(输入输入),3.参数缺省,4.函数重载

    1.命名空间

      作用:对标识符的名称进行本地化,避免命名冲突

      定义:namaspace space_name { 空间成员}

         空间成员可以是定义变量,也可以是定义函数

      特点:可独自命名,可进行空间嵌套,可分段定义

      注意:分段定义时,允许命名空间的名称相同,但是空间成员不能相同,因为编译器会将命名空间名称相同的合并到一起,空间成员如有相同则会产生重定义

      使用:作用域限定符---" :: ''

         1>空间名称 作用域限定符 空间成员

         2>使用using 将命名空间的成员引入

          using space_name :: space_number; ---将space_name空间中指定的空间成员展开到当前的作用域中

         3>使用using namespace 空间名称   // 将空间名称引入

          using namespace space_name; ---将space_name空间中所有的空间成员都展开到当前的作用域中<不推荐使用,容易产生命名冲突>

      使用说明:使用using 会将命名空间中的空间成员展开到当前作用域

           若当前作用域为全局域,则可以全局范围使用

           若当前作用域为局部域,则只能在局部范围使用

    // 单独使用
    namespace a1{
        int a = 10;
        int Add(int x, int y){
            return x + y;
        }
    }
    // 分段使用
    namespace a1{
        int b = 10;
        int Sub(int x, int y){
            return x - y;
        }
    }
    // 嵌套使用
    namespace a2{
        int a = 10;
        int Add(int x, int y){
            return x + y;
        }
        namespace a3{
            int c = 20;
            int Sub(int x, int y){
                return x - y;
            }
        }
    }
    int main(){
        // 命名空间的使用
        a1::b;
        a1::Sub(10, 20);
        return 0;
    }

    2.IO流(输入输出)

      使用cout标准输出(控制台)与cin标准输入(键盘)时,必须包含头文件<iostream>和std标准命名空间;

      头文件:#include<iostream>

      输出流  cout

        int a = 10;

        int b = 20;

        std::cout << "a = " << a << " ";

        std::cout << "b = " << b << " ";

      输入流  cin

        char a;  int b;  double c;

        std::cin >> a >> b >> c

        可以分开流入,也可以直接流入

      可以看出cout、cin都需要std::引用,所以它们属于std命名空间中的空间成员,可以在全局域中直接展开

      eg  usinf std::cout;

        cout << "Hello world ";

        cin >>a >>b >> c;

    3.缺省参数

      定义:在定义或声明一个函数时,为形参设置一个默认值,如果没有进行传参,函数将会默认使用提前设置好的形参默认值

      

    using std::endl;
    
    void func(int a = 10){
        cout << a << endl;
    }
    
    int main(){
        cout << "未传形参值
    ";
        func();
        cout << "传形参值
    ";
        func(20);
        return 0;
    }

      根据参数默认值是否完全设置,可以分为:全缺省参数和半缺省参数

      需要注意:

        1.半缺省参数必须从右往左给出,不能间隔给出

        2.缺省参数不能在函数声明和定义中同时出现

        3.缺省参数值必须是常量或全局变量

    using std::endl;
    
    // 全缺省参数
    void func_1(int a = 10, int b = 20, int c = 30){
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl;
    }
    
    // 半缺省参数
    void func_2(int a, int b = 20, int c = 30){
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl;
    }

    4.函数重载

      1-函数重载(搞不好就会函数重定义)

        同名函数的形参列表必须不同:参数类型不同 或 参数个数不同 或 参数顺序不同

        <1>void fun_1(int a);

        <2>void fun_1(int a, int b);

        <3>int fun_1(int a, int b);

        <1><2>构成函数重载,<3>与<2>构成函数重定义

        说明:函数修饰符不影响函数重载,也就是说函数重载只看形参列表的区别

      2-函数名修饰规则 以Linux系统下显示结果进行说明

       函数名修饰时,<从左往右>以参数类型的第一个字符开头进行修饰

      

      3-extern "C"  一般用于C/C++混合编译时声明

        告诉编译器,将该函数按照C语言编译规则进行编译

      

    // 用于声明函数风格为C风格
    extern "C" int Add(int x, int y){
        printf("x + y = ");
        return x + y;
    }
    
    int main(){
        Add(1, 2);
        return 0;

    思考几个问题:

      1.什么情况下两个函数才能形成函数重载?

        函数名相同,而形参列表不同。不同之处在于:类型不同 或 个数不同 或 顺序不同

      2.C语言为什么不支持函数重载?

        C语言编译器底层对函数名称修饰过于简单,只是进行函数名下划线处理,不会形成函数重载,只会是重定义

      3.C++中函数重载底层是怎么处理的?

        利用函数的形参类型、个数、顺序的不同,使用每个形参的类型的首个字符进行组合形成“修饰符”

        利用三者的不同,可以组合成不同的“修饰符”,来对函数名进行修饰,使之不会发生函数名冲突

      4.C++中能否将一个函数按照C风格来编译?

        可以,必须对函数进行 extern "C" 声明

  • 相关阅读:
    oracle 之 while循环月份
    oracle 之 for循环表
    基本类型与字符串之间的转换
    java的数据类型和mysql的数据类型和Oracle数据类型
    EasyPoi导入数据后,导出发生错误的数据报[object Object]
    mysql查询表名是否存在和oracle查询表名是否存在
    mysql服务相关命令
    vue:按钮后面加一个下拉箭头
    js删除对象中的属性使用delete
    为什么在前端存入的日期,到后台却多了8个小时?而且前端显示的又是很丑的时间戳
  • 原文地址:https://www.cnblogs.com/bj3251101/p/10760403.html
Copyright © 2011-2022 走看看