一、C++语言概述
面向对象的语言
二、第一个C++程序
1.vi first.cpp
两种编译方式:
1)g++ first.cpp
2)gcc first.cpp -lstdc++
2.文件扩展名
1)xx.cpp
2)xx.cc
3)xx.C
4)xx.cxx
建议使用第一种扩展名写法:.cpp
3.头文件
`#include <>iostream`
注:所有标准C++中的I/O相关类型、对象、函数都在该文件中;标准C中的头文件依然可以使用
但是为了符合C++的编程风格,C++提供了一套不带“.h”的等价版本
`#include <stdio.h> ---> #include <cstdio>
`#include <stdlib.h>` ---->#include <cstdlib>
.......
注:只有标准库里的头文件可以这样写,UNIXC库按原来格式使用
4.标准输入输出
1)cin对象表示标准的输入设备//类似scanf
例:
int num;
scanf("%d\n",&num);
cin >> num; // >> 称为输入(提取)操作符
int i;
double d;
scanf("%d%lf",i,d);
cin >> i >> d; //用 >> 隔开
2)cout对象表示标准输出设备//类似printf
例:
int i =1234;
printf("%d",i);
cout << i << endl;// << 称为输出(插入)操作符
//打印一个整形数和一个浮点数
int i=1234,double d = 56.78;
printf("%d,%lf",i,d);
cout << i << "," << d << endl;
//endl 类似 \n
三、名字空间(namespace)
1.基本概念:
①名字空间也成为命名空间,可以表示一个作用域
②定义名字空间中的实体被称为名字空间成员
2.名字空间作用
①避免名字冲突
②划分逻辑单元
3.定义名字空间
namespace 名字空间名{
名字空间成员1;
名字空间成员2;
}
注:名字空间成员可以是全局变量,函数,类型,名字空间
4.名字空间的使用
1)通过作用域限定操作符“::”
空间名::要访问的成员
例如:
std:cout //访问标准名字空间中的cout对象
2)名字空间指令
using namespace 空间名;
注:该条指令以后的代码当中,对于指定名字空间的成员都可见,可以直接访问,省略“空间名::”,受作用域限定
例如:
using namespace std;
3)名字空间声明
using 空间名::名字空间成员;
注:将名字空间中的特定一个成员引入当前声明的作用域中,在该作用域中访问这个成员就如同访问自己的局部变量一样,可以直接访问,省略“空间名::”
5.无名名字空间
没有放在任何名字空间的成员,将被编译器放入无名名字空间中,无名空间中的成员正常可以直接访问,如果和局部变量成员名字相同,局部优先;这时如果还希望访问无名空间中的成员,可以显式使用“::成员”
参考代码:
#include <iostream>
using namespace std;//标准名字空间指令
namespace ns1{
void func(void){
cout << "ns1的func" << endl;
}
}
namespace ns2{
void func(void){
cout << "ns2的func" << endl;
}
}
int main(void)
{
using ns1::func;//名字空间声明
func();
//using ns2::func;
//func(); //歧义错误
func();//ns1::func,局部优先
ns2::func();
return 0;
}
#include <iostream>
using namespace std;
namespace ns1{
int num = 100;
}
int num = 200;
int main(void)
{
cout << num << endl;//200
using ns1::num;//名字空间声明
cout << num << endl;//100
cout << ::num << endl;//200
return 0;
}
四、C++的结构体,联合和枚举
1.结构体
1)当定义结构体变量时,可以省略struct关键字
2)在C++结构体中,可以直接定义函数,称为成员函数(方法),在成员函数中可以直接访问结构体中的其他成员
例:
struct HttpRequest{...};
struct HttpRequest req1;//C中
HttpRequest req3;//C++中
2.联合体
1)当定义联合变量时,可以省略union关键字
2)支持匿名联合
注:联合体可以用来判断处理器大小端
3.枚举
1)定义枚举类型变量时,可以省略enum
2)C++枚举看作是一种独立的数据类型,不能当做整形数据使用
enum STATE{SLEEP,RUN,STOP};
enum STATE state(){
...
return STOP;
}
五、字符串
1.C++兼容C中字符串的同时,增加string类型专门表示字符串
1)定义字符串
string s1; //定义空字符串
string s2 = "hello"; //定义字符串同时初始化
//以下两种写法跟上面的写法等价
string s3 = string("hello");
string s4("hello");
2)字符串基本操作
①字符串拷贝:“=”
string s1 = "hello";
string s2 = "abc";
s2 = s1;
②字符串连接:“+/+=”
string s1 = "abc";
string s2 = "def";
string s3 = s1 + s2; //s3:"abcdef"
s1 += s2; //s1 = s1 + s2
③字符串比较:"== /!=/>/</>=/<=
string s1 = "hello";
string s2 = "hello";
if(s1 == s2)
{
cout << "true" << endl;
}
注:比较的是首字符的ASCII码值,如果相同继续比较下一个字符
④随机访问:"[ ]"
string s = "hello";
s[0]='H';
cout << s <<endl; //“Hello”
3)相关成员函数
size()/length() //获取字符串的长度
c_str() //获取C风格const char*
string s = "hello";
cout << s.size(); //5
cout << s.length(); //5
cout << strlen(s.c_str()); //5