一,C++三大主体
1.C++语法
2.C++库:STL
3.高阶数据结构(如果在此没学初阶数据结构的可以先去学)
二,认识C++
目录:什么是C++->C++发展史->C++重要性->如何学习C++
一.什么是C++
C++ 是一种高级编程语言。
C++ 是在 C 语言的基础上发展而来的,它既保留了 C 语言的高效、灵活和接近底层硬件的特点,又增加了面向对象编程的特性,如类、对象、继承、多态等。
以下是 C++ 的一些重要特点和应用场景:
-
高效性:C++ 允许开发者直接操作内存,对于性能要求极高的系统,如操作系统内核、游戏引擎、实时控制系统等,C++ 能够提供出色的性能。
例如,许多大型游戏,如《使命召唤》《刺客信条》等,其核心部分就是使用 C++ 编写的,以确保游戏在复杂的场景和大量的交互中仍能保持流畅的运行。
2.面向对象编程:通过类和对象的概念,C++ 使得代码更具组织性、可维护性和可扩展性。
比如,在开发一个图形库时,可以创建一个 Shape
类,然后派生出 Circle
(圆形)、Rectangle
(矩形)等子类,实现代码的复用和功能的扩展。
3.泛型编程:通过模板机制,C++ 支持编写通用的代码,可用于处理不同类型的数据。
像标准模板库(STL)中的容器(如 vector
、list
)和算法(如 sort
、find
)就是泛型编程的典型应用。
4.广泛的应用领域:C++ 几乎适用于所有需要高性能和复杂逻辑的领域,包括软件开发、游戏开发、嵌入式系统、金融交易系统等。
二.C++发展史
C++的发展历史可以追溯到20世纪80年代,以下是其主要的发展阶段和重要事件:
- 起源(1979年):比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)开始着手“C with classes”的研发工作,旨在为C语言增强一些类似Simula的特点,以解决大型软件开发的问题。他选择C语言的基础是其适用于各种用途、快速且可移植。同时也从其他语言如Algol68、Ada、CLU以及ML中获取灵感。
- 1983年:“C with classes”语言更名为C++。此时许多重要特性被加入,如虚函数、函数重载、引用机制(符号为&)、const关键字以及双斜线的单行注释(从BCPL语言引入)。Rick Mascitti建议将“C with class”更名为“C++”,其中“++”运算符表示对变量进行递增操作,也象征着C++是C语言的增强版。
- 1985年:斯特劳斯特卢普的C++参考手册《The C++ Programming Language》出版,同年C++的商业版本问世。由于当时C++没有正式的语言规范,这本书成为了业界的重要参考。
- 1989年:C++再次版本更新,引入了多重继承、保护成员以及静态成员等语言特性。
- 1990年:《Annotated C++ Reference Manual》发布,Borland公司的商业版Turbo C++编译器也随之问世,附带的大量函数库对C++开发产生了深远影响。
- 1998年:C++标准委员会发布了C++语言的第一个国际标准—ISO/IEC 14882:1998,即C++98。标准模板库(STL)也被纳入该版标准中。
- 2003年:针对C++98版本中存在的问题进行修订后,发布了C++03标准。
- 2011年:新的C++标准(C++11)面世。Boost库对该版本影响很大,一些新模块直接衍生于Boost中的相应模块。新的语言特性包括正则表达式、完备的随机数生成函数库、新的时间相关函数、原子操作支持、标准线程库、新的for语法、auto关键字、新的容器类、更好的union支持、数组初始化列表的支持以及变参模板的支持等。
- 2014年:C++14标准获得一致通过,标准是“ISO/IEC 14882:2014 Information Technology -- Programming Languages -- C++”。它对C++11进行了一些改进和补充,增强了泛型编程和元编程的能力,例如变长模板、泛型 lambda 表达式、constexpr 函数等。
- 2017年:ISO C++委员会正式发布了C++17标准,官方名称为 ISO/IEC 14882:2017,又称C++1z。它基于C++11,旨在使C++成为一个不那么复杂的编程语言,以简化日常使用,包括常量表达式函数、if constexpr、折叠表达式、执行上下文和文件系统库等新特性
三.C++重要性
在性能关键型应用中的核心地位:
C++允许对硬件进行底层控制和优化,这在性能至关重要的领域如游戏开发、实时系统和高性能计算中不可或缺。例如,大型 3A 游戏如《巫师 3》,为了实现逼真的画面效果和流畅的游戏体验,其核心引擎部分通常使用 C++编写,以充分利用硬件资源,达到高帧率和低延迟。
系统编程的首选语言:
操作系统内核、驱动程序和设备控制等系统级编程任务中,C++是常见的选择。像 Windows 和 Linux 内核的部分关键模块就是用 C++实现的,确保系统的稳定性和高效性。
金融和交易领域的可靠性:
在高频交易和金融计算中,每一点性能提升都至关重要。C++的高效性和精确控制使得金融机构能够快速处理大量交易数据,降低风险。
跨平台开发的能力:
通过适当的编码和编译设置,C++编写的程序可以在多种不同的操作系统和硬件架构上运行,为开发者提供了广泛的部署灵活性。
培养良好的编程习惯和思维:
C++的复杂性要求开发者具备严谨的逻辑思维、内存管理能力和对程序性能的敏感度。掌握 C++有助于提升开发者在其他编程语言中的编程水平。
长期的技术积累和广泛的资源:
由于其悠久的历史,C++拥有丰富的库、框架和成熟的开发工具,使得开发复杂项目更加高效。
四.如何学习C++
1. 基础知识学习:
- 选择一本权威的 C++入门书籍,如《C++ Primer》《Effective C++》等,系统地学习语法、数据类型、控制结构等基础知识。
- 在线课程也是不错的选择,例如 Coursera、EdX 等平台上的相关课程。
2. 实践练习:
- 多动手编写代码,通过实际项目练习来巩固所学知识。
- 可以从简单的控制台应用程序开始,如实现一个计算器、学生成绩管理系统等。
3. 深入理解面向对象编程(OOP):
- 掌握类、对象、继承、多态等 OOP 概念,并通过实际案例进行练习。
- 例如,设计一个动物类的层次结构,包括基类
Animal
和派生类如Dog
、Cat
等。
4. 学习标准模板库(STL):
- 熟悉常用的容器(如
vector
、list
、map
等)和算法(如排序、查找等),提高编程效率。 - 尝试使用 STL 来解决一些数据处理问题,如对一组数字进行排序和筛选。
5. 阅读优秀的代码:
- 在 GitHub 等代码托管平台上查找高质量的 C++项目,阅读并理解其代码结构和设计思路。
- 可以参考一些开源的 C++库,如 Boost 库。
6. 参与社区和交流:
- 加入 C++相关的论坛、社区,与其他开发者交流经验、解决问题。
- 例如,在 Stack Overflow 上提问和回答与 C++相关的问题。
7. 项目实践:
- 参与实际的项目开发,将所学知识应用到实际场景中。
- 可以参与开源项目或者自己开发一个小型的应用程序,如一个简单的图形界面程序。
8. 不断复习和总结:
- 定期回顾所学内容,总结常见的错误和解决方案。
- 建立自己的代码笔记,方便随时查阅和复习。
三.关于namespace的介绍
1.namespace可开一个命名域
如:namespace bit
{
int rand=0;
struct Node
{
int val;
struct Node*next;
}
void Add(int left,int right)
{
return left+right;
}
//可以包含变量/函数/结构体
}
2.namespace命名域的调用
方法一:
①bit:: + 调用变量 如:printf("%d",bit::rand);
②struct bit::Node photo;
③printf("%d",bit::Add(1,2));
方法二:开放命名域
using namespace bit;(注意:可以单独开放某个变量,如:using bit::rand;
✳:1:不同域可定义相同变量,同域不可
2.不同文件可定义同一个命名空间,他们之间会合并
3.命名空间是域
四.头文件iostream和bits/stdc++.h
1.#include<iostream>是包含在std命名域内的,运用其内的cout,cin和endl是要调用std命名域 如:std::cout<<...<<...endl;
2#include<bits/stdc++.h>是总头文件,包含了所有头文件在内
五.cout,endl和cin的可能及其运用
①.count类似于printf,他可以自动识别变量类型 如:
int i=0;
double j=1.11;
std::count<<i<< " "<<j<<endl;也能运行起来,与printf("%d %d\n",i,j);等价
②.cin类似于scanf,也可以自动识别变量类型
用法:std::cin>>i>>j;与scanf("%d%d",&i,&j);等价