• namespace、struct、enum、union、string(day01)


    一 C++概述
    1 C++历史背景
    1)C++的江湖地位
     jave C C++ C# python
    
    2)C++之父:Bjarne Stroustrup(1950--)
    1979,Cpre,为C语言增加类的机制
    1983,Bjarne发布了全新的编程语言C with Class
    1985,CFront1.0《The C++ programming Language》
    
    3)C++发展过程
    1987,GNU C++
    1990,Borland C++(BC编译器)
    1992,Microsoft C++(VC)
    1998,ISO C++98
    2003,对C++98进行修订,C++03
    2011,ISO C++11/C++0x
    2014, ISO对C++标准做了部分扩展,C++14
    *2017,C++17(未知)
    
    2 应用领域
    1)游戏
    2)科学计算
    3)网络通信(ACE)
    4)操作系统和设备驱动
    5)其它...
    
    3 C和C++
    1)都是编译型语言
    2)都是强类型语言,但是C++更强
    3)C++兼容C语言,但是去除了C中不好的特性
    4)C++增加了很多了好的特性,比C语言更适合大型软件的开发
    
    二 第一个C++程序
    1 编译方式
    1)gcc xx.cpp -lstdc++
    2)g++ xx.cpp //good
    
    2 文件扩展名
    1)xx.cpp//good
    2)xx.cc
    3)xx.cxx
    4)xx.C
    
    3 头文件
    //包含标准C++中所有和I/O有关的类型、对象、函数
    #include <iostream> 
    
    //在C++中依然可以使用C库的函数,但需要写上对应的有文件,C++中提供了一套和C库对应的头文件
    #include <stdio.h> ==> #include <cstdio>
    #include <stdlib.h> ==> #include <cstdlib>
    #include <string.h> ==> #include <cstring>
    ...
    
    4 标准输入和输出
    1)用cin对象表示标准输入//类似scanf
    eg:
       //从标准输入设备获取一个整形数放到变量a中
       int a;
       scanf("%d",&a);
       cin >> a;
       ">>" 称为提取运算符
    eg:
       int a;
       double d;
       scanf("%d%lf",&a,&d);
       cin >> a >> d;
       
    2)用cout对象表示标准输出//类似printf
    eg:
       int a = 100;
       printf("%d
    ",a);
       cout << a << endl;
       "<<":称为插入运算符
       注:endl表示换行,和“
    ”等价
    eg:
       int a = 10;
       double d = 3.14;
       printf("%d,%lf
    ",a,d);
       cout << a << ',' << d << endl;   
    
    5 "std::"表示标准名字空间
    
    三 名字空间(namespace)
    1 名字空间的作用
    1)避免名字冲突
    2)划分逻辑单元
    
    2 定义名字空间
    namespace 名字空间名{
        名字空间成员1;
        名字空间成员2;
        ...
    }
    名字空间成员可以是全局变量、全局函数、类型、名字空间。
    eg:
    namespace ns{
        int i;//全局变量
        void func(void){...}//全局函数
        struct Stduent{...};//结构体类型
        namespace ns2{...}
    }
    
    3 名字空间成员使用
    1)通过作用域限定运算符“::”
      名字空间名::要访问的成员;
      eg:
      namespace ns{
        int i;//全局变量
      }
      int main(void){
         i=100;//error,名字空间里面成员不能直接访问
         ns::i=100;//ok,通过作用域限定符可以访问
      }
    2)名字空间指令
      using namespace 名字空间名;
      在该条指令以后的代码,指定名字空间中的成员都可见,访问其中的成员可以省略作用域限定。
    
    3)名字空间声明
      using 名字空间名::名字空间成员;
      将名字空间中的某个成员引入当前作用域,在该作用域访问这个成员如果访问局部变量一样,可以省略作用域限定.
    eg:
      namespace ns{
         int i1=10;
         int i2=20;
      }
      int main(void){
          using namespace ns;//名字空间指令
          cout << i1 << endl;//ok
          cout << i2 << endl;//ok
          ---------------------------
          using ns::i1;//名字空间声明
          cout << i1 << endl;//ok
          cout << i2 << endl;//error
      }
    4 无名名字空间
      不属于任何名字空间的标识符,将被编译器划分到无名名字空间中,显式访问里面的成员:"::成员"5 嵌套名字空间//了解
    eg:
      namespace china{
          namespace beijing{
               namespace chaoyang{
                      char* name;
               }
          }
      }
      china::beijing::chaoyang::name = "老王";
      
    四 C++结构体、联合体和枚举
    1 C++结构体
    1)定义结构体类型变量时可以省略“struct”关键字
    eg:
      struct A{...};//声明
      A a;//定义结构体类型的变量a
    2)在C++结构体里面可以直接定义函数,称为成员函数,而且在成员函数中可以直接访问成员变量;
    eg:
      struct A{
          int a;//成员变量
          void foo(void){...}//成员函数
      };
      
    2 联合体 //了解
    1)定义联合体类型变量时可以省略“union”关键字
    2)支持匿名联合
    
    3 枚举
    1)定义枚举类型变量时可以省略“enum”关键字
    2)C++枚举是一种独立的数据类型,而C中枚举本质就是整型数。
    eg:
      enum COLOR{RED,GREEN,BLUE};
      /*enum*/COLOR c;
      c = 100;//C:ok C++:error
    
    五 C++的字符串
    1 C++兼容C中字符串表示方式
    1)字面值常量字符串 "hello"
    2)字符指针 char*
    3)字符数组 char[]
    eg:
      const char* p = "hello";
      //strcpy(p,"world");//段错误
      p = "world";//ok
      
      char arr[5]={0};
      strcpy(arr,"jiangguliang");//越界使用内存危险
      cout << arr << endl; 
      
      //arr-->char* const arr
      //arr = "hello";//error
    2 C++中增加string类型,专门表示字符串
    1)定义字符串
      string s;//定义空字符串
      string s1 = "hello";//定义同时初始化
      string s2("hello");
      string s3 = string("hello");
      注:s1 s2 s3三种写法完全等价
    2)字符串的基本操作
    --》字符串拷贝"="
    --》字符串的连接"+" "+="
    --》字符串比较: > < == !=
    --》获取字符串中某个字符:[]
    --》获取字符串的长度:size()/length()
    --》将string转换成char*: c_str()
    eg:
      string s1 = "hello";
      s1 = "abcdefg";//拷贝字符串
      cout << s1 << endl;//abcdefg
      ------------------------------
      string s1 = "hello";
      s1 += " world";//把world连接到s1后面
      cout << s1 << endl;//"hello world"
      ------------------------------
      string s1 = "hello";
      string s2 = s1 + " world";
      cout << s2 << endl;//"hello world"
      ------------------------------
      string s1 = "hello";
      string s2 = "world";
      if(s1 > s2){//字符串比较
          cout << "s1>s2" << endl;
      }
      else{
        cout << "s1<s2" << endl;
      }
      ------------------------------
      string s1 = "hello";
      //获取字符串中某个字符
      cout << s1[0] << endl;//h
      s1[0] = 'H';
      cout << s1 << endl;//Hello
      ------------------------------
      string s1 = "hello world!";
      cout << s1.size() << endl;//12
      cout << s1.length() << end;//12
      -----------------------------
      string s1 = "hello";
      char* s2 = s1;//error
      char* s2 = s1.c_str();//ok
      
      
    =====================
    练习:使用string表示字符串,从键盘读取一个字符串,统计里面包含字母A/a的个数.
    string s;
    cin >> s;//注:会被空白字符截断
    getline(cin,s);//它可以读走空格
  • 相关阅读:
    UDK Stat命令
    绝地求生-全军出击手游
    UE3中的时间
    Git原理与命令大全
    【SpringCloud】Spring Cloud Alibaba 之 Nacos注册中心(二十七)
    【SpringCloud】Spring Cloud Alibaba 及 Nacos介绍(二十六)
    【Web】Keepalived+Nginx 实现高可用集群
    【SpringCloud】Spring Cloud Sleuth + Zipkin + RabbitMQ 集成(二十五)
    【SpringCloud】Spring Cloud Sleuth 日志跟踪(二十六)
    Spring框架学习笔记(5)——Spring Boot创建与使用
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7729356.html
Copyright © 2020-2023  润新知