您的位置:首页 > 编程语言 > C语言/C++

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
/** 代码 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++