day01 C++名字空间、结构体、联合体、枚举 、字符串

===================
标准C++(11天)
QT编程(7天)
web服务器项目(三天)
===================
《C++程序设计与实践》
《C++ Primer》
====================
一 C++语言概述
1 历史背景
1.1 C++的江湖地位
  java、C、C++、C#、python
 
1.2 C++之父:Bjarne Stroustrup(1950--)
1979:Cpre,为C语言增加类的机制
1983:Bjarne发布全新编程语言C with class,后来命令为C++
1985:CFront1.0  
     《The C++ programming Language》
 
1.3 C++发展过程
1987,GNU C++
1990,Borland C++(BC)
1992,Microsoft C++(VC)
1998,ISO C++98,发布C++国际标准
2003,对C++98标准修订,C++03
2011,ISO C++11/C++0x
2014,ISO 对C++11做了部分扩展,即C++14
*2017,C++17
 
=============
2 应用领域
2.1 游戏开发
2.2 科学计算//fortain
2.3 网络通信(ACE库、libev...)
2.4 操作系统和设备驱动
2.5 其它...
 
=============
3 C和C++
3.1 都是编译器语言,采用静态编译模式
3.2 都是强类型语言,但是C++更强
3.3 C++兼容C语言,但是去除了C中不好特性
3.4 C++增加了很多C语言没有的好的特性,全面支持面向对象,比C语言更适合大型软件的开发。
 
==================
二 第一个C++程序
1 编译方式
  gcc xx.cpp -lstdc++
  g++ xx.cpp //good
 
2 文件扩展名
  .cpp //good
  .cc
  .C
  .cxx
 
3 头文件
  #include <iostream>//C++头文件一般没有.h后缀
  #include <stdio.h>//使用C语言的头文件  
             ||
  #include <cstdio> //C++风格
   
4 输入和输出
  用cin对象表示标准输入
  用cout对象表示标准输出
eg:
  int num,num2;
  cin >> num;//scanf("%d",&num);
  cin >> num >> num2;//scanf("%d%d",&num,&num2);
 
  double d;
  cin >> d;//scanf("%lf",&d);
 
eg:
  int num = 100;
  double d = 3.14;
  char* str = "hello";
  cout << num;//printf("%d",num);
  cout << num << endl;//printf("%d\n",num)
 
  //printf("%d,%lf,%s\n",num,d,str);
  cout << num << ',' << d <<  ',' <<  str << endl;
  cout << "hello world" << endl;
 
5 std::标准名字空间
 
========================
三 名字空间(namespace)
1 定义名字空间
namespace 名字空间名{
   名字空间成员1;
   名字空间成员2;
   ......
}
名字空间成员可以是全局变量、函数、自定义类型、名字空间
eg:
namespace ns1{
  int x;
  void foo(void){...}
  struct Student{...};
  namespace ns2{...}
}
 
2 名字空间的使用
2.1 通过作用域限定运算符"::"
名字空间名::要访问的成员;
eg:
int main(void){
   x = 100;//直接访问名字空间成员error
   ns1::x = 100;//ok
}
 
2 名字空间指令
  using namespace 名字空间名;
  在该条指令以后的代码,制定名字空间中的成员可见,访问时可以省略作用域限定。
eg:
  using namespace std;//以后可以省略"std::"
   
3 名字空间声明
  using 名字空间名::名字空间成员;
  将名字空间中的特定成员引入到当前作用域,在该作用域中就可以直接访问该成员,可以省略作用域限定。
eg:
namespace ns{
   int a;
   int b;
}
int main(void)
{
   using ns::a;
   a = 100;//ok
   b = 200;//error
}
 
4 无名名字空间
  不属于任何名字空间的标识符(变量、函数..),将被编译器自动放入无名名字空间中。
 
显示访问无名名字的成员:"::标识符"
 
5 名字空间的嵌套
namespace ns1{
   int num = 10;
   namespace ns2{
       int num = 20;
       namespace ns3{
              int num = 30;
       }
   }
}
cout << ns1::num << endl;//10
cout << ns1::ns2::num << endl;//20
cout << ns1::ns2::ns3::num << endl;//30
 
==================
四 C++的结构体、联合体、枚举
1 结构体
1)C++中定义结构体变量可以省略struct关键字
eg:
  struct A{
     int i;
     double d;
  };
  int main(void){
     struct A a;//定义结构体类型的变量
     A  a;//C++中可以省略struct
  }
2)C++中结构体里面可以定义函数,称为成员函数,而且在成员函数中可以直接访问成员变量。
 
2 联合体(了解)
1)定义联合体变量可以省略union
2)支持匿名联合
 
3 枚举
1)定义枚举变量可以省略enum关键字
2)C++枚举是一种独立的数据类型,而C中的枚举本质就是整形数。
 
enum COLOR {RED,GREEN,BLUE};
 
enum COLOR c;//c中
COLOR c;//C++风格
 
c = 2;//C:ok  C++:error
c = BLUE;//C:ok C++:ok
----------------------------------
五 字符串(重点)
1 兼容C中字符串
1)双引号: "hello world"
2)字符指针: char*  
   char* p = "hello world";
3)字符数组
   //char *const arr
   char arr[] = "hello world";
   char arr[20];
==================================
strcpy(p,"jiangguiliang");//段错误
strcpy(arr,"jiangguiliang@sina.com");//越界使用危险
p = "jiangguiliang";//ok
arr = p;//编译报错
===================================
 
2 C++增加string类型,专门表示字符串
/*
struct string{
   char *m_str;
}
*/
 
1)定义字符串
  #include <string>//可以不写,标准名字空间已经包含
  string s;
  string s = "hello";  
 
2)字符串操作
赋值:=
eg:
  string s1 = "hello";
  string s2 = "jiangguiliang"
  s1 = s2;//将s2赋值给s1
 
连接:+/+=
eg:
  string s1 = "hello";
  string s2 = "world";
  string s3;
  s3 = s1 + s2;
  cout << s3 << endl;//helloworld
  s1 += s2;
  cout << s1 << endl;//helloworld
 
比较:<  <=  >=  >  ==  !=
eg:
   if(s1 == s2){...}
 
3 和字符串相关函数
  size()/length();//获取字符串的长度
  c_str();//返回const char* 的字符串
 
4 string字符串可以当做字符数组来使用
  string s = "hello";
  s[0] = 'H';
 
六 C++的布尔类型
1 bool类型是C++中的基本数据类型,专门表示逻辑值:true(1)/false(0);
 
2 bool类型在内存占一个字节:1表示true,0表示false
 
3 bool类型的变量可以接受任意类型变量或表达式的值,其值非0为true,为0(NULL)则为假
 
七 C++字符形式的运算符(了解)
&& -- and
|| -- or
^  -- xor
{  -- <%
}  -- %>
!  -- not
!= -- not_eq
......
========================
练习:使用string类型,从键盘读取一个字符串,统计字符串中包含多少个"A/a";
string s;
cin >> s;//从键盘读一个字符串放到s中,被空格截断
 
getline(cin,s);//从键盘读一个字符串放到s中,可以读到空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值