Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python爬虫

  • 前端教程

    • 团队规范

    • Project

    • JS

    • NodeJS

    • Vue

    • React

    • 效率工具

      • 前端必备效率工具
      • 初识C++
        • [#](#数据类型) 数据类型
      • 前端抓包神器Charles
      • Docker Kubernetes
      • Git实用命令
      • npm script技巧
      • Python基础语法
      • Python语法精髓
      • 前端常用解决方案
      • Shell Vim
      • VSCode插件开发实践
      • VSCode快捷键及常用插件
      • 你必须知道的yarn
    • 读书笔记

  • 教程
  • 前端教程
  • 效率工具
wangmings
2022-07-19
目录

初识C++

# # 初识C++

C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。C++ 进一步扩充和完善了 C 语言,任何合法的 C 程序都是合法的 C++ 程序。

    // 是否安装了 GCC,使用的是 Linux 或 UNIX
    g++ -v // MacOS安装了xcode后,默认带
    
1
2
3
    // #include <stdio.h> 是预处理器指令,告诉 C/C++ 编译器在实际编译之前要包含 iostream 文件。
    // iosstream该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
    #include <iostream>
    
    // g++ main.cpp -o helloworld编译c++源码,生成可执行文件
    // ./helloworld 运行文件
    int main()
    {
        // :: 是作用域符,是运算符中等级最高的
        // 在这里我想用cout对象是命名空间std中的cout
        std::cout << "Hello World!\n";
        return 0;
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14

C++ 是大小写敏感.C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态。

# # 数据类型

  • bool
  • char 字符型
  • int/float/double
  • void
  • wchar_t 宽字符型
    #include<iostream>  
    #include<string>  
    #include <limits>  
    using namespace std;  // 声明命名空间
      
    int main()  
    {
        char x = 'x' // 变量声明
        const int  LENGTH = 10; // 常量声明
    
        // << 运算符用于向屏幕传多个值
        // 使用了 endl,这将在每一行后插入一个换行符
        cout << "type: \t\t" << "************size**************"<< endl;  
        cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);  
        cout << "\t最大值:" << (numeric_limits<bool>::max)();  
        cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;  
        cout << "char: \t\t" << "所占字节数:" << sizeof(char);  
        cout << "\t最大值:" << (numeric_limits<char>::max)();  
        cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
        return 0;  
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

基本数据类型是以上七种。

  • 枚举类型:enum color { red, green=5, blue };

  • 函数: 跟大多数语言一致。return_type function_name( parameter list ){...}

    int max(int num1, int num2) 
    {
       // 局部变量声明
       int result;
     
       // if else
       if (num1 > num2)
          result = num1;
       else
          result = num2;
     
       return result; 
    }
    
    // Lambda 函数(也叫 Lambda 表达式):[capture](parameters)->return-type{body}
    [](int x, int y) -> int { int z = x + y; return z + x; }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • 数组:type arrayName [ arraySize ];
    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}; // 定义数组
    double salary = balance[0]; // 访问数组
    
1
2
3

c++数组,内置无lenght或size()获取数组长度

  • 字符串
    #include <cstring>
    
    char greeting[] = "Hello";
    cout << "Greeting message: ";
    cout << greeting << endl;
    cout << strlen(greeting) << endl;
    
1
2
3
4
5
6
7
    // C++ 标准库提供了 string 类类型
    #include <string>
    string str1 = "Hello";
    str3.size(); // 5
    
1
2
3
4
5
  • 指针

指针是一个其值为地址的变量,(就是一个存储地址的变量)。

    int a = 5;
    int *p = &a; // 指针变量里存储的是地址,&a也是地址.p是指针变量,&a是一个具体的地址
    
1
2
3

int * 类型变量 p 里存放的是 int * 类型的地址,我们可以用这个地址找到内存中的一个存储空间。

c++要这个类型的变量(指针)有什么用呢?比如我们要去上课,下午一共三节课,有数据结构课,有算法课,还有c++课,三节课在不同的教室,如果我们不知道c++课在哪个教室,就得挨个去看喽,如果我们知道c++课在101教室,算法课在102教室,数据结构的课在103教室,直接去101教室就好啦,起中间媒介的连接作用的101,102,103编号或许有助于对指针的理解。指针变量里的内容就是编号,指针起这样的媒介的、连接的、引导的作用~~~ 在计算机内存中,指针变量中存储的就是编址后的内存的各个编号,这个编号一般叫地址。

    // c++中指针的定义,四种写法编译都没有错误
    //  * 号我们现在可以理解为这仅仅代表定义了一个指针变量p, p的类型是 int * 或者 int* 
    int *p; //*号前有空格,可以是任意个空格
    int* p; //*号后有空格,可以是任意个空格
    int*p; //*号前后都没有空格
    int * p; //*号前后都有空格,可以是任意个空格
    
1
2
3
4
5
6
7
    int p; //这是一个普通的整型变量
    int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针
    int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组
    int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组
    
1
2
3
4
5
    #include <iostream>
    using namespace std;
    int main()
    {
       int a=5;
       double b=10.4;
       cout<<"Address of a:"<<&a<<endl; // Address of a:0x7ffeede2899c
       cout<<"Address of b:"<<&b<<endl; // Address of b:0x7ffeede28990
       int c = a; // 虽然赋值,但基本类型,a和c不同地址
       int* d = &c; // d和c指向同一个地方
    //    c = 6; // 当c改变时,d的指针也同时变
        *d = 10; // 当d改变时,c的值也同时改变c=10
        cout<<"Address of c:"<<&c<<";"<<c<<endl; // Address of c:0x7ffee798098c;5
        cout<<"Address of d:"<<d<<";"<<*d<<endl; // Address of d:0x7ffee798098c;5
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

箭头(->):左边必须为指针;点号(.):左边必须为实体。

  • 类
    class Shape // 定义类
    {
       public: // 限定符
          void setWidth(int w) // 方法函数
          {
             width = w;
          }
          void setHeight(int h)
          {
             height = h;
          }
       protected:
          int width;
          int height;
    };
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // 类实例化
    // 一:不使用new,当作普通参数
    #include<iostream>
    using namespace std;
    
    class A {
        public:
            int a;
        A() { a = 5; } // 可理解为构造函数
    };
    
    int main() {
        A a = A();
        A a1 = a; // a复制给a1,但它们之间不是引用
        a1.a = 6; // a1改变,不影响a的内容。
        cout<<&a<<&a1<<endl; // a1和a完全不同的两个地址
        cout<<a.a<<a1.a<<endl; // 5,6
    };
    
    // 二:使用new
    // new创建类对象需要指针接收
    #include<iostream>
    using namespace std;
    
    class A {
        public:
            int a;
        A() { a = 5; } // 可理解为构造函数
    };
    
    int main() {
        A* a = new A();
        A* a1 = a; // a复制给a1,引用互通。有点类似高级语言的引用类型
        a1->a = 6; // a1改变,a同时改变。
        cout<<a<<a1<<endl; // a1和a完全相同的两个地址
        cout<<a->a<<a1->a<<endl; // 6,6
    };
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
编辑 (opens new window)
前端必备效率工具
前端抓包神器Charles

← 前端必备效率工具 前端抓包神器Charles→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式