问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

从C语言到C++:面向对象编程与STL库入门

创作时间:
作者:
@小白创作中心

从C语言到C++:面向对象编程与STL库入门

引用
CSDN
1.
https://m.blog.csdn.net/Echoooooo679/article/details/144279139

概述

C++是一种基础的编程语言,在系统级编程、游戏开发、嵌入式系统、高性能计算和大规模软件开发等领域都发挥着重要作用。C++起源于C语言,由Bjarne Stroustrup于1983年开发,最初是为了增强C语言的功能性而设计的。随着时间的推移,C++逐渐演变为一门多范式编程语言,结合了面向对象编程、泛型编程和低级操作的特性。

相比于C语言,C++的主要特点是增加了面向对象机制(面向对象三大特性:

  1. 封装
    把客观事物封装成抽象的类【具有相同的数据和相同的操作的一组对象的集合】,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
    类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。

  2. 继承
    继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。
    继承的作用:避免公用代码的重复开发,减少代码和数据冗余。

  3. 多态
    多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。)

C++与C语言在功能上的优劣

首先 C++是能够兼容C语言的,C++继承了C语言高效,简洁,快速和可移植的传统。C++本身就是起源于C语言,用C++编写出的程序完全可以用C语言进行替换,它们在用法上十分相似。其次,C++有更丰富的STL库【编程模块的集合,可以在程序中去调用他们,文章后面有介绍哦】,更加便捷。但是,C++在时间效率上要弱于C语言。

初识C++

  • 引入头文件 C++中的头文件常使用#include<iostream>相当于C语言中的#include<stdio.h>
  • 使用标准命名空间 using namespace std;这一步是必须要写上的,可以看作是用C++编写程序时基础结构的一部分
  • 标准输出流对象 cout << “…” << endl;

!问题:using namespace std 是什么?

namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。

!问题:cout 、endl 是什么?

cout是c++中的标准输出流
endl是输出换行并刷新缓冲区。

示例(以输出hello world为例)

C++对C的扩展

4.1 变量声明

C++中变量可以直接在for循环中声明即for(int a=1;a<=10;a++)

4.2 bool类型

C++中,bool类型只有两种情况,即true和false,true指非零元素,false指0。

4.3 const定义常量

const定义的常量不能被改变,可以看作是一个恒定义。

4.4 string类

·4.4.1 string定义
例:string s="hello"

·4.4.2 string拼接
例:string s=s1+s2

·4.4.3 string输入(出)
输入 cin >> s(这个仅局限于一个字符,不可以输出一行,例如可以用它输入hello,但是不可以输入hello world)
getline(cin,s)(这个输入的含义是输入一行)
输出 cout << s<< endl

·4.4.4 string 处理
s.length()指求s的长度
s.substr(n,m)(这个意思是说从第n个字符开始,一共取m个字符)
s.substr(n)(这个指从第n个字符开始,其后面的字符全部存入所定义的变量中)

·4.5 结构体
C++中可以省去struct

·4.6引用&(注意:这里的&与C语言中的取地址符没有关系)和传值
int &aint a

4.5 STL篇

·4.5.1 vector
头文件 #include<vector>
创建数组 vector<int> v (创建了一个没有元素存在的数组v)
vector<int> v(m,n) (创建了一个数组空间为10,初始值为n的数组)
vector<int>v(m)(创建了一个数组空间为m,初始值相当于0的数组)
分配数组大小 (数组名).resize(length)
末尾添加新的数据 (数组名).push_back(数据)
迭代器 (C++中,迭代器就是一个类似于指针的对象,它能够用来遍历C++标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。)
for(auto p=c.begin();p!=c.end();p++)
{cout << *p <<" "; }

·4.5.2 set(set是集合,它里面的元素各不相同,而且元素会按照从小到大排序)
头文件 #include<set>
创建集合 set<int>s; s的后面不可以加内容
处理 插入 s.insert(数据);查找 s.find(数据); 删除 s.earse(数据);

·4.5.3 map(键值对)
它会自动将所有键值对按照键从小到大排序
处理 cout<<m["world"];如果存在“world”,则返回值,否则返回0
获取长度 m.size();

·4.5.4 stack(栈)
创建栈 stack<int>s;
处理 压栈s.push(i); 出栈m.pop(); 访问栈项s.top(); 获取长度 m.size();、

·4.5.5quene(队列)
创建 quene<int>s;
处理 入队s.push(i); 出队s.pop(); 访问队首s.front():队尾s.back(): 获取长度s,size();

4.6 auto 声明

auto是一个提示符,提示编译器根据变量的值来推导变量的类型。auto是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 使用auto定义变量时必须初始化,auto变量无法作为参数。
推广:迭代器

4.7 函数定义

C++的函数定义与其他语言的函数定义也存在一些差异。C++使用函数头和函数体的组合来定义函数。函数头包括返回类型、函数名和参数列表,而函数体则包含实际的函数实现。

在C++中,函数可以被重载,这意味着可以定义具有相同名称但不同参数列表的多个函数。编译器根据调用时提供的参数数量和类型来确定要调用的具体函数

4.8内联函数(该部分摘录了csdn中的一篇文章,原文链接:https://blog.csdn.net/CMtotoe/article/details/128749774)

在C++中,预定义宏的概念是用内联函数来实现的,而内联函数本身也是一个真正的函数。内联函数具有普通函数的所有行为。唯一不同之处在于内联函数会在适当的地方像预定义宏一样展开,所以不需要函数调用的开销。因此应该不使用宏,使用内联函数。

在普通函数(非成员函数)函数前面加上inline关键字使之成为内联函数。但是必须注意必须函数体和声明结合在一起,否则编译器将它作为普通函数来对待。

补充:由于时间和精力有限,只简单写了一点点C++中的皮毛,以后有时间会加强学习

鸣谢bilibili up主“别喷我id”的C语言转C++的简单教程视频!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号