Introduction to C++
选择需要的语言
观察最热门的语言
TIOBE Index:观察语言使用率的网站
现代编程语言之间的差异:
- 几乎都是 C-like 语言,语法上的差异非常小
- 由库和代码传统区分其适用范围
结论建议
- 对计算机本身(体系结构、操作系统、编译)感兴趣--->C
- 历史原因,许多计算机内核的内容都是由 C 或更底层的代码实现的
- 想编程解决⼿头的问题(统计、AI、桌⾯⼩程序)--->Python
- 大量的库和模块支持,适合编写小段代码完成一个小功能
- 有明确的需求(求职)--->⼈家要什么学什么(PHP、 JavaScript、 C++)
- C++ 是写库的语⾔
- 还没想好--->Java
Buzzwords
- encapsulation
- 译为封装,内容不外露,外部由统一的接口管理
- $\neq$ package
- inheritance
- 继承
- polymorphism
- poly- 多,morph 形态, -ism 主义,译为多态
- 一个水杯装不同的内容,洗手和洗衣服都是“洗”
- overriding
- over- 超越,ride 骑,译为覆盖
- 和 overwrite 有区别:overwrite 指改写
- interface
- 界面、接口
- 两个东西链接的地方
- cohesion
- 内聚
- 一个物品的内容紧密相连
- coupling
- 耦合
- 两个东西之间如何链接,关联的程度
- collection classes
- 容器(和集合 set 区分)
- template
- 模板
- responsibility-driven design
- 每个对象只完成它的责任
C++ 历史简述
Bjarne Stroustrup
-
1980年代,在美国电话电报公司(AT&T)首先设计和实现了C++。
-
2002年十月到访浙江大学。
-
著有 《The Design and Evolution of C++》,由 Addison-Wesley 出版,ISBN 0-201-54330-3。
历史进程
- 1975 - 1978,BS 在剑桥大学读书。
- 使用 Simula 编写仿真程序
- 支持类、继承和类型检查,但解释语言,性能很差
- 1979,BS 进入 AT&T 的贝尔实验室,着手研究 C with classes。
- 1980,BS 已经定义了除 virtual function 之外的绝大部分 C++ 特性。
- 1983,BS 完成了 virtual function 的定义,这门新的语言被 Rick Mascitti 命名为 C++。
- 1985,Cfront 出现,用于将 C++ 代码翻译为 C 代码来编译,这样不用自己写 C++ 编译器了。
- 同年 BS 发布著作《The C++ Programming Language》(非初学者的教科书)。
- 1990,ANSI C++ Committee 成立,ISO/ANSI Standard C++ 国际标准。
- 1998,C++98 标准,ISO/IEC 14882:ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP (open-std.org)
- 2011,C++11 标准,相较于 C++98 有海量的新内容
- 2014,C++14 标准,有少量的更新,tick-tock 更新模式
- 2017,C++17 标准,大量预期的特性没有进入
- 2020,C++20 标准,,可以在 C++ 里写 Python
C 与 C++
C++ 的目的
支持面向对象程序设计的同时,保持 C 的高性能
C++ 与 C 的区别
- 应该将 C++ 视为一门独立的语言
- C++ 支持面向对象
- C++ 支持泛型
- C++ 支持函数式编程
Example
简单的输入输出:
#include <iostream>
#include <iomanip>
using namespace std;
int main(void){
int number;
cout << "Enter a decimal number: ";
cin >> number;
cout << "The number you entered is: " << number << endl;
return 0;
}
<iomanip>
库包含许多控制符(manipulator),包括位宽控制 setw()
、精度控制 setprecision()
等。
cout << setw(10) << setprecision(2) << 12.856 << endl;
String 类的使用
C++ 中维护字符串的类。
详细内容:std::basic_string - cppreference.com
定义
#include <string>
std::string str;
std::string s1("abcd");
std::string s2 = "bcde";
std::string s3(s1);
实际上的构造函数原型
string(const char *cp, int len);
string(const string& s2, int pos);
string(const string& s2, int pos, int len);
输入输出
cin >> str;
cout << str;
getline(cin, str);
字符串的连接
s3 = s1 + s2;
s3 += "lalala";
其他方法
s.length()
:返回字符串的长度
s.substr(pos, len)
:将 pos
位开始的 len
个字符返回。
其他的方法:
void insert(size_t pos, const string& s);
void erase (size_t pos = 0, size_t len = npos);
void append (const string& str);
void replace (size_t pos, size_t len, const string& str);
size_t find (const string& str, size_t pos = 0) const;