zoukankan      html  css  js  c++  java
  • C++ 总体内容(1)

    1 C++概述

      1.1 C++两大编程思想

        1.1.1 面向对象  泛型编程

      1.2 C++98标准

    2 C++书写hello world

      2.1 包含头文件 #include <iostream> //标准输入输出头文件

      2.2 using namespace std; //使用标准命名空间

      2.3 cout << "hello world" << endl;

      2.4 面向对象三大特征: 封装、继承、多态

    3 双冒号作用域运算符

      3.1 ::前面如果没有任何作用域,就代表全局作用域

    4 命名空间 namespace

      4.1 命名空间的用途:解决命名冲突

      4.2 命名空间下,可以存放变量,函数,结构体,类...

      4.3 命名空间必须声明在全局的作用域下

      4.4 命名空间可以嵌套命名空间

      4.5 命名空间是开放的,可以随时向命名空间添加新的成员

      4.6 命名空间是可以匿名的

    namespace
    {
        int a = 10;
        int b = 20; 
    }
    // 以上相当于:static int a = 10; static int b = 20; 匿名命名空间中的变量a和变量b只能在本文件使用

      4.7 命名空间是可以取别名的

    namespace veryLongName
    {
        int a = 100;
    }
    
    void test()
    {
        namespace veryShortName = veryLongName;
        cout << veryShortName::a << endl;
        cout << veryLongName::a << endl;
    }

    5 using 声明和using 编译指令

      5.1 using 声明

        5.1.1 声明的格式: using student::name;

        5.1.2 当就近原则和 using 声明同时出现时,需要避免二义性

      5.2 using 编译指令

        5.2.1 using namespace std;

        5.2.2 如果出现就近原则,优先使用就近原则

        5.2.3 如果有多个命名空间打开,并且存在同名的变量,使用的时候需要加作用域区分

    6  C++对C语言的增强

      6.1 全局变量增强

      6.2 函数检测增强

        6.2.1 形参变量类型检测增强,函数声明的返回值检测增强,函数返回值检测增强,调用时参数传入个数检测增强

      6.3 类型转换检测增强

        6.4.1 malloc返回的void* 在C++下必须强转

      6.4 struct 增强

        C语言中,结构体里面不能放函数

        C语言中,声明结构体必须加上struct关键字

      6.5 bool 类型增强

        C语言中,没有bool 类型

      6.6 三目运算符增强

        C语言中,三目运算符返回的是值  *(a > b ? &a : &b) = 10; 

        C++语言中,三目运算符返回的是变量  a > b ? a : b = 10; 和上面的语句等效

      6.7 const 增强

        6.7.1 C语言下

          6.7.1.1 全局const 语法可以通过,运行报错

          6.7.1.2 局部const 语法通过,运行成功,并可以进行修改

    void test()
    {
        const int a = 10;  
        int arr[a] = {0};  // 错误,a是伪常量
    }

        6.7.2 C++语言下

          6.7.2.1 全局const 语法可以通过,运行报错

          6.7.2.2 局部const 语法通过,可以运行,但是不能进行修改(const修饰的变量是放在符号表中的,不能进行修改)

    void test()
    {
        const int a = 10;
    
        int* p = (int*)&a;
        *p = 20;
        std::cout << a << std::endl; // 10
    
        // 编译器默认的操作
        // int temp = a;
        // int* p = &a; <<=>> int* p = &temp;
        // *p = 20; <<=>> temp = 20;
    
        int arr[a] = { 100 }; // a 是真正的常量
        std::cout << arr[0] << std::endl; // 100
    }

    6.8 const 在C语言下,默认是外部链接属性

      在a.c文件中 定义全局const变量, const int a = 100; 这里编译器默认会在前面加上 extern ,让该变量可以在其他文件中进行使用 

      在b.c文件中,使用方式如下:

    void test()
    {
        extern int a; // 告诉编译器去其他文件寻找变量a
        printf("a = %d
    ", a);
    }

    6.9 const 在C++语言下,默认是内部链接属性

    6.10   const分配内存的情况

      6.11 对const修饰的变量取地址的时候,会分配临时内存

      6.12 const前加入extern关键字后,会分配内存,此时可以修改该const值

      6.13 使用变量来初始化const修饰的变量,此时会分配内存,可以修改该const值

    void test()
    {
        int a = 10;
        const int b = a;
        int* p = (int*)&b;
        *p = 20;
        std::cout << b << std::endl; // 20
    }

      6.14 对于自定义的数据类型,会分配内存,此时也可以修改该const值

      6.15 尽量利用const来代替define

        6.15.1 宏常量 没有类型

        6.15.2 宏常量 不重视作用域

    7 引用

      7.1 用途,给内存(变量)起别名

      7.2 语法: type& 别名 = 原名

      7.3 引用必须初始化

      7.4 引用一旦初始化,就不可以修改其指向了

    8 函数参数的传递方式

      值传递

      地址传递(也可以算是值传递,这个没必要去纠结)

      引用传递

    9 引用的注意事项

      9.1 不要返回局部变量的引用

      9.2 如果函数的返回值是引用,那么这个函数调用可以作为左值进行运算

     10 引用的本质

      10.1 引用就是一个指针常量

      10.2 所以引用必须进行初始化

      10.3 初始化后不能修改其指向

    void test(int& ref) // 编译器会转换为 int* const ref = &a
    {
        ref = 100; // 编译器自动转化为 *ref = 100;
    }
    
    int main()
    {
        int a = 10;
        int& ref_a = a; // 编译器会自动转化为 int* const ref_a = &a;
        ref_a = 20; // 编译器会自动转化为 *ref_a = 20;
        cout << a << endl; // 20
        cout << ref_a << endl; // 20
        test(a);
        cout << a << endl; // 100
    
        return 0;
    }

    11 指针的引用

      11.1 通过引用技术,可以简化指针

    12 常量的引用

      12.1 使用场景:修饰函数中的形参,防止误操作

  • 相关阅读:
    MySQL导出数据库、数据库表结构、存储过程及函数
    个人支付接口
    C# WPF,XAML 跨平台应用框架
    uniapp 第三方组件库
    C语言图形界面库
    微信小程序 获取cookie 以及设置 cookie
    stm32资源网
    找最长连续重复字母子串
    asp .net web api Swagger简单实用
    跨域问题
  • 原文地址:https://www.cnblogs.com/chen-cai/p/10426038.html
Copyright © 2011-2022 走看看