C++:C++背景、名字空间、结构联合枚举、字符串类型
2017-02-02 15:27
525 查看
《C++语言程序设计》
C++面向对象,开发效率高,倾向与程序的设计(C语言倾向于程序的实现)
一、面向对象
1. 特征
1)封装(结构体/函数)
2)继承和派生
3)多态
二、C++的历史
1979 年 Bjarne Sreopstrip 在BELL 实验室C Pre (C/C++/Unix)
1983 年 C whit calss 实现投入使用
1985 年 C Front 1.0 发布《The C++ Programing Language》
1987 年 GNU C++ 发布
1990 年 Borland C++ 发布
1992 年 Microft,IBM, C++ 发布
*1998 年 ISO 发布C++98 标准 / visual Studio C++ 6.0
2003 年 ISO 发布C++03 标准
*2011 年 ISO 发布C++11 标准 最著名的《C++ Primer 5》(已买)
2014 年 ISO 发布C++14 标准
2017 年 ISO 即将发布 C++17 标准
三、C++ 江湖地位:C -> C++ -> Java -> python (使用比例从多到少)
编译型语言:C/C++
解释执行语言:Java/python/C#/Swift/javascript(JS近两年热)
四、C++应用领域:
1)游戏(最大领域)
2)科学计算
3)网络通信
4)操作系统和驱动设备
5)其他...
五、C++从第一个程序开始
1. 从hello,world开始:
1.1 编译:
$ "g++ hello.cpp" (默认使用)
$ gcc hello.cpp -lstdc++
libstdc++.so 为C++标准库文件。
1.2 运行:
$ a.out
2. C++文件后缀名:
.cpp (默认使用)
.cc (早期的c++和苹果系统中的c++源文件)
.C (微软系统不识别大小写,不推荐使用)
.cxx
3. C++中的C语法
#include <cstdio>==
#include <stdio.h> //比如使用print时
4. C++的基本输入输出
4.1 cin对象 和 cout对象 //键盘和屏幕
4.2 流输入运算符 >>
4.3 流输出运算符 <<
六、名字空间 namespace
1. 名字空间的作用:
1)避免名字冲突
2)划分逻辑作用域
2. 名字空间的定义方法:
3. 名字空间的使用
3.1 名字空间::函数名/变量名;
::作用域限定符
//相当于访问名字空间里的对象,可译为“的”
3.2 名字空间指令 <tips>"正常模式下shift + v,箭头选多行,=缩进"
using namespace XXX;
作用:导入名字空间内的"所有"标识符到当前程序
3.3 名字空间声明
using 名字空间名::名字空间成员
作用:仅导入"一个"标识符到当前程序
3.4 无名名字空间的访问用 :: 访问全局变量
::global_val = 1000;
4. 名字空间的合并 <tips>"shift + d,剪切当前光标及后面内容 p 粘贴"
名字空间可以分别定义,编译器会自动组合。
5. 名字空间嵌套、名字空间别名
七、C++的结构 struct
1. C++结构中可以有成员函数,对象可以根据.或->来调用成员函数,结构体中的变量可以直接用于结构体中的函数;
2. C++结构在创建变量时,可以省略掉 struct 关键字
八、C++联合体 union
1. C++创建联合体变量时可以省略掉 union 关键字
2. C++支持匿名联合
九、枚举
1. C和C++枚举类型有很大的变化;
C语言的枚举都是整型的,C++语言的枚举是有自己的类型的。
1)C++枚举在创建变量的时候可以省略掉 enum 关键字
2)C++枚举可以赋值给整型变量,但整型变量不能赋值给枚举类型的变量
十、字符串类型 string /* C++中多出两个类型:string/布尔类型 */
包含的头文件 "#include <string>"
包含的名字空间 "std"
1. 字符串的运算符操作
= 字符串的赋值
+ 字符串的连接
+= 字符串的追加
[] 访问字符串单个元素
2. 字符串的比较:== !=
< > <= >=
3. 字符串常用的成员函数:
size_t size() / length() //返回一个字符串的内容长度
void swap(string & s);//交换两个字符串: s1.swap(s2);
int find(char c, int pos = 0); //用于查找字符串中的一个字符,成功则返回当前字符所在的位置下标,失败则返回-1
void insert(int begin, const string & s); //插入字符串
void erase(int begin, int size); //删除字符串
void replace(int begin, int size, const string & s); //替换字符串
作业:
随意输入一个长字符串,统计字符串中'i'字符的总个数。使用string类实现。
C++面向对象,开发效率高,倾向与程序的设计(C语言倾向于程序的实现)
一、面向对象
1. 特征
1)封装(结构体/函数)
2)继承和派生
3)多态
二、C++的历史
1979 年 Bjarne Sreopstrip 在BELL 实验室C Pre (C/C++/Unix)
1983 年 C whit calss 实现投入使用
1985 年 C Front 1.0 发布《The C++ Programing Language》
1987 年 GNU C++ 发布
1990 年 Borland C++ 发布
1992 年 Microft,IBM, C++ 发布
*1998 年 ISO 发布C++98 标准 / visual Studio C++ 6.0
2003 年 ISO 发布C++03 标准
*2011 年 ISO 发布C++11 标准 最著名的《C++ Primer 5》(已买)
2014 年 ISO 发布C++14 标准
2017 年 ISO 即将发布 C++17 标准
三、C++ 江湖地位:C -> C++ -> Java -> python (使用比例从多到少)
编译型语言:C/C++
解释执行语言:Java/python/C#/Swift/javascript(JS近两年热)
四、C++应用领域:
1)游戏(最大领域)
2)科学计算
3)网络通信
4)操作系统和驱动设备
5)其他...
五、C++从第一个程序开始
1. 从hello,world开始:
1.1 编译:
$ "g++ hello.cpp" (默认使用)
$ gcc hello.cpp -lstdc++
libstdc++.so 为C++标准库文件。
1.2 运行:
$ a.out
/** 代码 hello.cpp **/ #include <iostream> //C++标准输入输出头文件 int main(void) { /* cout 是流输入对象 std 是名字空间 namespace :: 是作用域运算符 << 是流输入运算符 */ std::cout << "hello,world!\n"; return 0; }
2. C++文件后缀名:
.cpp (默认使用)
.cc (早期的c++和苹果系统中的c++源文件)
.C (微软系统不识别大小写,不推荐使用)
.cxx
3. C++中的C语法
#include <cstdio>==
#include <stdio.h> //比如使用print时
4. C++的基本输入输出
4.1 cin对象 和 cout对象 //键盘和屏幕
4.2 流输入运算符 >>
4.3 流输出运算符 <<
/** 代码 03cin_cout.cpp **/ #include <iostream> int main(void) { int i = 100; const char *p = "hello"; //const char * double pi = 3.14; char ch = 'T'; /* std::cout << i << p << pi << ch << std::endl; */ std::cout << i << " " << p << " "; std::cout << pi << " "; std::cout << ch << std::endl; std::cout << "请输入一个整数:\n"; std::cin >> i; //从键盘读入整数放入i std::cout << "您刚才输入的是:" << i << std::endl; std::cout << "请输入一个字符:\n"; std::cin >> ch; std::cout << "ch = " << ch << "|\n"; char buffer[1024]; std::cin >> buffer; std::cout << "buffer = " << buffer << std::endl; //gets 在C11标准中已去掉 return 0; }
六、名字空间 namespace
1. 名字空间的作用:
1)避免名字冲突
2)划分逻辑作用域
2. 名字空间的定义方法:
namespace 名字空间名 { 变量声明; 函数声明; //其他名字空间声明; namespace XXX { } }
3. 名字空间的使用
3.1 名字空间::函数名/变量名;
::作用域限定符
//相当于访问名字空间里的对象,可译为“的”
3.2 名字空间指令 <tips>"正常模式下shift + v,箭头选多行,=缩进"
using namespace XXX;
作用:导入名字空间内的"所有"标识符到当前程序
/** 代码演示 **/ #include <iostream> using namespace std; //此例子示意名字空间指令 namespace ICBC { int money = 0;//工商银行存的前数 void saveMoney(int m) { money += m; } void showMoney() { std::cout << "工行共有" << money << "元\n"; } } namespace CCB { int money = 0; void saveMoney(int m) { money += m; } void showMoney() { cout << "建设银行存款有" << money << "元\n"; } } using namespace CCB; //名字空间指令 //using namespace ICBC; int main(void) { saveMoney(100); saveMoney(200); ICBC::saveMoney(500); //调用名字空间ICBC的函数 std::cout << ICBC::money << std::endl; std::cout << money << std::endl;//访问全局的 return 0; }
3.3 名字空间声明
using 名字空间名::名字空间成员
作用:仅导入"一个"标识符到当前程序
3.4 无名名字空间的访问用 :: 访问全局变量
::global_val = 1000;
4. 名字空间的合并 <tips>"shift + d,剪切当前光标及后面内容 p 粘贴"
名字空间可以分别定义,编译器会自动组合。
5. 名字空间嵌套、名字空间别名
/** 代码 **/ #include <iostream> using namespace std; //名字空间嵌套 namespace china { namespace beijing { namespace dongcheng { int money = 100; } } } //名字空间别名 namespace chbjdc = china::beijing::dongcheng; int main(void) { cout << chbjdc::money << endl; return 0; }
七、C++的结构 struct
1. C++结构中可以有成员函数,对象可以根据.或->来调用成员函数,结构体中的变量可以直接用于结构体中的函数;
2. C++结构在创建变量时,可以省略掉 struct 关键字
/** 代码演示 **/ #include <iostream> using namespace std; struct Human { char name[20]; int age; void printInfo() { //成员函数,属于结构体,非全局 cout << "我叫" << name << ",我今年" << age << "岁\n"; } }; int main(void) { /*struct*/ Human h1 = {"张飞", 25}; //c++中struct此行可省略 h1.printInfo(); Human *ph = &h1; ph->printInfo(); return 0; }
八、C++联合体 union
1. C++创建联合体变量时可以省略掉 union 关键字
2. C++支持匿名联合
/** 代码演示 **/ #include <iostream> using namespace std; union N { char a[4]; int i; }; int main(void) { N n; //可以不加关键字 union union { //匿名联合 int j; int k; }; j = 100; cout << k << endl; return 0; }
九、枚举
1. C和C++枚举类型有很大的变化;
C语言的枚举都是整型的,C++语言的枚举是有自己的类型的。
1)C++枚举在创建变量的时候可以省略掉 enum 关键字
2)C++枚举可以赋值给整型变量,但整型变量不能赋值给枚举类型的变量
/** 代码演示 **/ #include <iostream> using namespace std; enum Color { RED = 0, //C++中Color是RED的类型 GREEN, BLUE, YELLOW }; int main(void) { Color c = RED; int i = c; i = YELLOW; //3 cout << i << endl; //c = i; //error return 0; }
十、字符串类型 string /* C++中多出两个类型:string/布尔类型 */
包含的头文件 "#include <string>"
包含的名字空间 "std"
1. 字符串的运算符操作
= 字符串的赋值
+ 字符串的连接
+= 字符串的追加
[] 访问字符串单个元素
/** 代码演示 **/ #include <iostream> #include <string> using namespace std; int main(void) { string s1 = "hello"; string s2 = " world"; string s3 = s1 + s2; //字符串连接 s3[0] = 'H'; s3[6] = 'W'; cout << s3 << endl; s3 = "hello,shenzhen"; s3 += "!"; //字符串的追加 s3 += "!!!!!"; cout << s3 << endl; cin >> s3; cout << s3 << endl; cout << s3[0] << endl; return 0; }
2. 字符串的比较:== !=
< > <= >=
3. 字符串常用的成员函数:
size_t size() / length() //返回一个字符串的内容长度
void swap(string & s);//交换两个字符串: s1.swap(s2);
int find(char c, int pos = 0); //用于查找字符串中的一个字符,成功则返回当前字符所在的位置下标,失败则返回-1
void insert(int begin, const string & s); //插入字符串
void erase(int begin, int size); //删除字符串
void replace(int begin, int size, const string & s); //替换字符串
/** 代码演示 **/ #include <iostream> #include <string> #include <string.h> using namespace std; int main(void) { char b[100] = "hello"; cout << sizeof(b) << endl; //100 cout << strlen(b) << endl; //5 string s1 = "hello"; cout << s1.size() << endl; //5 s1 = "ABCDEFG"; cout << s1.size() << endl; //7 string s2 = "123456"; s2.swap(s1); cout << "s2:" << s2 << endl; //ABCDEFG cout << "s1:" << s1 << endl; //123456 string s3 = "hello world"; int ret = s3.find('l', 0); if(ret < 0) { cout << "没找到" << endl; } else cout << "找到了l在" << ret << "位置" << endl;//找到了l在2位置 s3.insert(0, "C++ "); cout << s3 << endl;//C++ hello world s3.erase(0, 3); cout << s3 << endl;// hello world s3.replace(7, 5, "shenzhen"); cout << s3 << endl;// hello shenzhen return 0; }
作业:
随意输入一个长字符串,统计字符串中'i'字符的总个数。使用string类实现。
"getline(cin, string & s);" //读取一整行字符串的方法,只以\n为分隔符 /** 正确完整代码如下 **/ #include <iostream> #include <string> using namespace std; int main() { string s; cout << "请输入一个字符串:\n"; //cin >> s; getline(cin, s); //读取一整行作为1个字符串 int count = 0, ret = 0; do{ ret = s.find('l', ret); if(ret < 0) { break; } ++count; ret++; } while(1); cout << "l这个字符的个数为:" << count << endl; return 0; }
相关文章推荐
- unit01_C++语言背景介绍 、 第一个C++程序 、 名字空间 、 结构、联合和枚举 、 布尔型与操作符别名
- c++笔记01---c++ 简介,g++ 编译器,名字空间,结构,联合,枚举
- day01 C++名字空间、结构体、联合体、枚举 、字符串
- c++高级---C++ 中的枚举类型----联合类型(总结)
- c++名字空间,C与C++字符串的区别,枚举类型
- C++中的枚举值类型转化为整数和字符串
- day_01_概述、名字空间、结构体、枚举、字符串
- C++中的枚举,结构,联合等。。。。
- c++中的结构,联合,枚举
- 联合、枚举和类型别名 - C++快速入门13
- MOOC——C语言11:结构类型:枚举,结构,联合
- Day36、C++输入输出、名字空间、结构体、联合体、枚举、字符串、布尔值
- 【c++】联合、枚举和类型别名
- c++2017-6-22结构、联合与枚举
- C数据类型和组合类型(结构、联合、枚举和typedef)
- 快速入门C++ 05(联合、枚举和类型别名)
- C++深入体验之旅八:枚举类型和结构体
- C++中的枚举,结构,联合等。。。。
- qt开发环境 - c++之结构,联合,枚举
- 联合、枚举和类型别名 - C++快速入门13