C++学习笔记day39-----C++98-头文件,命名空间,C++对结构体、联合、枚举的扩充,C++风格的字符串

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 <

猜你喜欢

转载自blog.csdn.net/displaymessage/article/details/80455649