1.C语言的产生
C++是C语言的超级, 事实上,任何合法的 C 程序都是合法的 C++ 程序。C++ 也是目前嵌入式 ( 无人驾驶 ) 的首选语言。
2.C++的优缺点
优点:
1.实现了面向对象程序设计。在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C++来编写的
2.功能强大,嵌入式首选
3.C++加上严格的codereview可以用来开除猪一样的队友,这是所有其他语言都不具备的功能
缺点:
1. 学习门槛高、难学
2. 知识点繁杂,
3.C++语言和Python的比较
C++:
#include <iostream>
int main(){
int x = 5;
std::cout << x << std::endl;
return 0 ;
}
编译型语言:是需要先编译后运行的语言 编译后通过链接,结合其他依赖库,然后生成机器码()可执行文件,以后在运行,无需编译
2.运行效率高:C++ 可以直接操作内存 指针。
python
python的代码:
print("aaa")
print("aaa")
print("aaa")
@
a = 3 / 0
print("aaa")
print(5)
解释型语言,也就是弱类型,不需要经过编译,是一边解释一边执行,,由于底层封装了很多库供程序使用,开发起来便捷,很好的跨平台,适合写小工具小程序
4.Hello Word
代码:
#include<iostream>
//include : 引入输入输出库
int main(){
std::cout<<"Hello word" <<std:endl;
return 0;
}
//int main(){} : 主函数入口
//std:: .... 输出打印
//return 0 : 函数返回值,一般0 表示正常执行返回。
5.main 函数的解释
int main(){
return 0;
}
main 函数是C++程序的入口函数 C++要求main函数的返回值得类型是int 0表示正常退出
6.注释
c++采用 // 和 /* */ 实现单行和多行注释。
7.数据类型
整数:int
单精度浮点数 :float
双精度浮点数:double
字符:char
字符串:string
布尔:bool
short
long
long long
c++提供sizeof()函数来获取某种数据类型占用的空间大小。
8.变量
1).C++是强类型语言 任何变量在使用前必须先声明,并且在声明的时候必须要指定该变量的数据类型,即该变量未来能够存储的数据类型。
除了变量 | 对象的声明初始化之外,其他的逻辑代码(需要经过调用 、 运算)都需要在函数内部编写。
int main(){
//先声明
int age ;
double price;
//后初始化
age = 10 ;
price = 20.3;
//声明及初始化
int age = 20 ;
return 0 ;
}
变量声明以及初始化常用手法:
x int age ; //未初始化
int age = 21 ; // C 方式初始化
int age (21); //构造方法初始化
int age {21} ; //c++ 11标准开始的方式
2).变量命名规则
1. 可以包含字母 、 数字 和下划线
2. 必须以字母或者下划线开始
3).常量
常量的值不允许变更,C++中的常量的声明需要使用 const 关键字,而python中的常量默认约定是全大写表示。
例:
int main(){
const double pi {3.1415926};
const int months_in_year{12};
pi = 2.5 ; //将会出现编译错误
return 0 ;
}
4).变量长度
sizeof 除了可以作用于类型身上之外,也可以作用于变量身上。
#include<iostream>
int main(){
double a = 20.0;
sizeof(a); //8
sizeof(int); //4
return 0 ;
}
5).输入和输出
python: python的输入输出是input 和 print
c++: std::cin 和 std::cout 来操作输入输出 。 C++的输入输出,需要导入 iostream 库 。
输出:
std::cout << "Hello" << std::endl;
输入:
int age ;
std::cin >> a
9.条件与循环
1)条件判断
if:
#include <iostream>
int main (){
std::cout << "请输入此次考试的成绩:" << std::endl;
int score ;
std::cin >> score;
if( score > 90){
std::cout << "可以休息一天" << std::endl;
}else if(score > 80){
std::cout << "可以休息半天" << std::endl;
}else{
std::cout << "乖乖去写作业" << std::endl;
}
return 0 ;
}
switch: 实际上switch和 if 语句块很相似, 它是完全的**等价条件判断**,但是一旦满足某个case的条件,那么其他**case 就不会再进行判断。**
#include <iostream>
int main (){
std::cout << "请输入此次考试的成绩评级" << std::endl;
char level ;
std::cin >> level;
switch (level){
case 'A':
std::cout << "优秀" << std::endl;
break;
case 'B':
std::cout << "良好" << std::endl;
break;
case 'C':
std::cout << "及格" << std::endl;
break;
case 'D':
std::cout << "仍需继续努力" << std::endl;
break;
default:
std::cout << "输入错误。" << std::endl;
break;![在这里插入图片描述](https://img-blog.csdnimg.cn/20200419105357942.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1dG9uZ2hlaWhlaTY2Ng==,size_16,color_FFFFFF,t_70)
}
return 0 ;
}
2)运算符操作
关系运算符 : 表示大小、相等操作的运算符,python和c++表示方法是一样的
逻辑运算符:有时候需要对多个条件进行一起判断
3)三元运算符:一般来说,非真即假的情况下,如果表达式比较简单,通常会采用三元运算符来实现
#include <iostream>
int main (){
int score;
std::cout << "请输入此次语文考试的成绩:" << std::endl;
std::cin >> score;
/*
//python的三元表达式:
result = 'A' if 100 > 90 else 'B'
print(result)
*/
//c++
char result = score > 90 ? 'A' : 'B';
std::cout << "您的语文成绩评级为:" << result <<std::endl;
return 0 ;
}
10 循环控制: 如果需要让某件事重复执行多次,那么循环操作再合适不过了。在c++里面,循环操作有:while | do-while | for 三种实现方式 。 比如模拟路口信号灯闪烁场景
1)while
#include <iostream>
int main (){
int count = 0 ;
while(count < 10){
std::cout << "红灯还在亮着..." << std::endl;
//单位是毫秒
Sleep(1000);
cout++;
}
return 0 ;
}
2)continue 和 break
#include <iostream>
int main (){
int number = 1 ;
while(number <= 20){
if(number == 16){
break;
}
//满足条件,表示当前的number是奇数。
if(number % 2 != 0 ){
continue;
}
std::cout << "当前打印的数字是: " << number << std::endl;
number++;
}
std::cout << "循环已结束! "<< std::endl;
return 0 ;
}
3)do-while:do-while结构与while差不多,区别只在于前者是上来先执行操作后判断,后者是先判断再执行循环操
#include <iostream>
int main (){
int count = 0 ;
do{
std::cout << "红灯还在亮着..." << std::endl;
//单位是毫秒
Sleep(1000);
cout++;
}while(cout < 10);
return 0 ;
}
4).for:在众多循环语句中,for 循环是使用频率最高的一种。
#include <iostream>
int main (){
for(int cout = 0 ; cout < 10 ; cout ++){
std::cout << "红灯还在亮着..." << std::endl;
//单位是毫秒
Sleep(1000);
}
return 0 ;
}
11.命名空间: 它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围
1). 自定义命名空间
#include <iostream>
//深圳的张三
namespace shenzhen{
string name = "张三";
}
//武汉的张三
namespace wuhan{
string name = "张三";
}
int main() {
std::cout << shenzhen::name << std::endl;
return 0;
}
2). 使用using指令: 可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
#include <iostream>
using namespace std;
int main(){
count<<"hi c++" << endl;
return 0 ;
}
-
数组: c++的数组实际上和python的 list 差不多,都是具有下标(索引) , 稍有不同的是,python的list不区分类型,而c++的数组必须是同一类型。
1)python的数组
scores = [100,98,88,'zhangsan',True] for s in scores: print(s)
2)c++的数组
#include <iostream> int main() { int scores[]{100,95,90,88} for(int s : scores){ std::cout << s << std::endl; } return 0 ; }
3)声明和初始化
数组是一系列相同类型的元素,放置在连续的内存位置,数组中的元素都可以通过索引来单独操作它们。 若查看某个变量存储地址可以使用 **取地址符 &** 声明:仅仅声明,而没有初始化的数组,内部的元素无法得到保证,系统会随机进行赋 #include <iostream> int main (){ int scores[5]; //这里遍历打印出来,数组的元素是随机的。 for(int s : scores){ std::cout << "s=" <<s << std::endl; } return 0 ; } 初始化 int main(){ //数组类型 数组名称 [元素个数]{初始化列表} //1. 声明后再初始化 int scores [5]; scores[0] = 11; scores[1] = 22; scores[2] = 33; scores[3] = 44; scores[4] = 55; //2. 声明并初始化 int scores [5]{100,89,95,70,80}; int socres [10]{88,75}; //剩下的都会以0占位,只初始化了前两位 int socres [10]{0}; // 表示10个长度的数组,每个元素都是0 //3. 自动推算数组大小 int socres[]{22,33,44,55,66}; //数组长度没有指定,根据后面初始化长度来推断。 return 0 ; }
4)访问数组:
1) 获取数组中的某个元素
数组是具有下标(索引)的容器,可以使用下标 (索引)来获取 , 下标(索引)从 0 开始。型如: 数组名称[元素索引]
#include <iostream>
int main(){
//声明并初始化数组
int scores [5]{100,89,95,70,80};
std::cout<<"数组的第一个元素是: "<< scores[0]<<std::endl;
std::cout<<"数组的第二个元素是: "<< scores[1]<<std::endl;
std::cout<<"数组的第三个元素是: "<< scores[2]<<std::endl;
std::cout<<"数组的第四个元素是: "<< scores[3]<<std::endl;
std::cout<<"数组的第五个元素是: "<< scores[4]<<std::endl;
//越界,不会报错,但是输出内容不是我们想看到的
std::cout<<"数组的第一个元素是: "<< scores[5]<<std::endl;
//修改指定位置的元素
scores[0] = 66;
return 0 ;
}
2).遍历数组
c++的数组,并没有提供获取长度的方法,所以不能直接遍历。一种是直接指定遍历的长度,一种是通过代码计算出数组的长度 ,一种是使用c++11提供的基于范围的for循环
#include <iostream>
int main(){
//定义数组
int scores[]{100,95,97,88,85,80,75};
//直接指定数组
for(int i = 0; i < 7; i++){
std::cout << scores[i] << std::endl;
}
//手动计算数组长度
int length = sizeof(scores) / sizeof(int);
for(int i = 0 ; i < length; i++){
std::cout << scores[i] << std::endl;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++
//c++11 提供的for循环
for(int score : scores){
std::cout <<cores[i] << std::endl;
}
return 0 ;
}
3)多维数组
数组里面的元素存储的还是数组,即可称之为多维数组。二维数组是常见的多维数组,再多维度的数组阅读起来就稍微有点复杂了。二维数组的操作实际上实际上和一维数组并没有多大区别。
数组类型 数组名称x; x可以认为是有多少行 , y可以认为是有多少列。多维数组无法进行长度推断,所以具体到行列的长度
13.C++ 风格字符串
C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。需要引入 #include ,由于string类声明在命名空间 std ,所以在使用的首要注意 命名空间的联合使用 。
//引入string库
#include <string>
using namespace std;
int mian(){
string s1;
string s2 {"北京"};
string s3{s2};
string s4 = "你好";
s1 = s3;
return 0 ;
}
14.C++风格字符串操作
1)拼接字符串 C++拼接字符串使用"+"’
#include<string>
using namespace std;
int main(){
string part1 {"c++"};
string part2 {" is a powerful"};
string sentence ;
sentence = part1 + part2 ;
return 0 ;
}
2)获取指定位置的字符
可以使用[]和 at()操作字符串
#include<string>
using namespace std;
int main(){
string s1 {"i love c++"};
cout << s1[3]<<endl;
cout << s1.at(0) << endl;
return 0 ;
}
3)遍历字符串
#include<string>
using namespace std;
int main(){
string s1 {"abcdef"};
for(char s : s1){
cout << s << endl;
}
for(int s : s1){
cout << s <<endl;
}
return 0 ;
}
4)字符串比较(字符串也是可以比较大小的)
#include<string>
using namespace std;
int main(){
string s1{"Apple"};
string s2{"Banana"};
string s3 {"kiwi"};
string s3 {"apple"};
string s3 {s1};
s1 == s5 // true
s1 == s2 // false
s1 != s2 // true
s1 < s2 // True
s1 > s2 // false
s1 == "Apple" // false
return 0 ;
}
5)截取字符串
#include<string>
using namespace std;
int main(){
substr(开始索引, 截取长度);
string s1 {"This is a test"};
cout << s1.substr(0 , 4) ; // This
return 0 ;
}
6).获取字符(字符串)在字符串中的索引
#include<string>
using namespace std;
int main(){
find(搜索的字符)
string s1 {"This is a test"};
cout << s1.find("This") ; // 0
cout << s1.find("is") ; // 2
cout << s1.find("test") ; // 10
return 0 ;
}
7)获取字符串长度
length() : 返回字符串长度