标准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中,可以读到空格