3、头文件
#include //标准C++和输入输出相关的文件
//依然可以使用标准C中头文件
stdio.h <==> cstdio
string.h <==> cstring
stdlib.h <==> cstdlib
4、输入和输出
1)输出:使用cout标准输出流对象
cout << a;
“<<”:称为插入操作符
endl == “\n”
2)输入:使用cin标准输出流对象
eg:
int a;
cin >> a;
“>>”:成为提取操作符
5、标准名字空间
三、名字空间(namespace)
1、关于名字空间的作用
1)避免名字冲突
2)划分逻辑单元
2、定义名字空间
namespace 名字空间名{
名字空间成员1;
名字空间成员2;
}
注:名字空间成员可以是全局变量、全局函数、类型、名字空间。
eg:
namespace ns{
int num = 0;
void func(…){…}
struct Student{};
namespace ns2{…};
}
3、名字空间里面成员使用
1)通过作用于限定操作符 “::”
空间名::要访问的成员
eg:
int main(void){
ns::num = 123;
}
2)名字空间指令
using namespace 名字空间名;
注:在该条指令以后的代码中,指定名字空间中的成员都可见,可以直接访问,省略”空间名::”。
3)名字空间声明
using 名字空间:: 名字空间成员;
注:将名字空间中的特定一个成员引入到当前声明的作用域,在该作用域中访问这个成员,就如同访问自己的成员一样,可以省略作用域限定。
4)无名名字空间:不属于任何名字空间的成员,将被编译器自动的放入无名名字空间中,无名空间里的成员可以直接访问,但是当无名空间里的成员和局部的成员一样,优先使用局部的成员,如果还想使用无名空间里面的成员,可以加上”::”,”::成员”//显式使用无名空间的成员
5)名字空间的嵌套
eg:
namespace lx{
int num = 100;
namespace lx1{
int num = 200;
}
}
cout << lx::num << endl;
cout << lx::lx1::num1 << endl;
当在一个区域内使用using编译指令(using namespace 空间名;)的时候,namespace中包含的所有内容,都被认为是在这个区域之外声明的,具有全局的属性,而实际上,在这个区域之外是无法通过直接调用的方式来访问namespce中的内容。如下:
#include <iostream>
namespace lx{
void display(void *num);
int num = 100;
}
using namespace std;
int main(void){
//在代码块中,使用using编译指令,就像是在这个代码块中将namespace的内容声明为全局的。
//然而namespace中的内容,实际上仅仅在这个代码块中可见。
using namespace lx;
int num = 200;
cout << "num = " << num << endl;
return 0;
}
int demo(void){
cout << num << endl;
return 0;
}
-------------------------------------------------------------
namespace.cpp: In function ‘int demo()’:
namespace.cpp:17:10: error: ‘num’ was not declared in this scope
cout << num << endl;
^~~
namespace.cpp:17:10: note: suggested alternative:
namespace.cpp:4:6: note: ‘lx::num’
int num = 100;
当在一个区域内使用using声明(using 空间名::成员;)的时候,会把指定的成员认为是在这个代码块中声明的局部成员,它会和该代码块中同名的成员产生冲突,如下:
#include <iostream>
namespace lx{
void display(void *num);
int num = 100;
}
using namespace std;
int main(void){
//在代码块中,使用using声明,就像是在这个代码块中声明了一个局部的成员,会和该代码块
//中,同名的成员发生冲突
using lx::num;
int num = 200;
cout << "num = " << num << endl;
return 0;
}
-----------------------------------------------------------------
namespace.cpp: In function ‘int main()’:
namespace.cpp:15:6: error: redeclaration of ‘int num’
int num = 200;
^~~
namespace.cpp:4:6: note: previous declaration ‘int lx::num’
int num = 100;
四 c++结构体、联合体和枚举
1、c++的结构体
1)、当定义结构体变量时,可以省略struct关键字。
2)、在C++结构体中可以定义函数,称为成员函数,在成员函数中,可以直接访问成员变量。
2、c++的联合体//了解
1)、定义结构体变量时,可以省略union关键字
2)、支持匿名联合
3、c++的枚举
1)、定义枚举类型变量时,可以省略enum关键字
2)、c++中的枚举,被认为是一种独立的数据类型,而C中的枚举,本质就是整型数据。
0:休眠
1:工作
2:停止
enum STATE{SLEEP,RUN,STOP};
五 c++字符串
1、回顾C中字符串
1)常量字符串 “hello”
2)字符指针 char*
3)字符数组 char[]
eg:
char *s1 = “hello”;
char *s2 = “world”;
strcpy(s1,s2)//段错误
char arr[] = “hello”;
strcpy(arr,”jianggl”);//内存的越界使用
char *p = “hello”;
char arr[] = “world”;
p = arr;//ok
arr = p;//error,char* const
2、c++兼容C中字符串的同时,增加string类型,专门表示字符串。
1)、定义字符串
string str;//定义一个空字符串
stirng str = “hello”;//定义字符串同时初始化
string str(“hello”);
stirng str = stirng(“hello”);
2)、字符串的基本操作
–>字符串拷贝:=
eg:
string str1(“hello “);
stirng str2(“world”);
str1 = str2;//拷贝
cout << str1 <