【C++】从C到C++
C和C++一些语法区别
1.三目运算符:在C语言中返回的是一个常量,是不能被赋值的;而C++中返回的是变量,可以被赋值
2.C++中的函数必须要写返回值类型
3.在全局下,C++不允许int a;
和int a=10;
等这种重定义二义性操作
4.在C++中不要返回局部变量或临时变量的地址,虽然C++能够运行变量出作用域之后再使用一次
5.C语言中const修饰的变量不能定义数组大小,而C++中可以
const int a=10;
float arr[a];
6.C++中定义结构体类型变量可以不用写结构体类型名
7.关于C语言有没有bool类型:C语言的布尔类型(bool)
C++11一些标准
兼容旧标准
1.以初始化列表的方式赋值
int c{2};
int d{(int)3.3};
int arr1[6]{1,2,3};
2.空指针
int *p=NULL;//旧标准
int *p1=nullptr;//新标准
3.自动类型
auto x=10.6;//根据初始化赋值的类型决定变量的类型
4.decltype的使用:可以理解为 复制类型
int n=123;
decltype(n) m=100;//定义一个和变量n一样类型的变量m
decltype((n)) k=n;//给变量n取一个别名k,类似于引用 int& k=n;
5.给数据类型取别名
typedef int HP;//旧
using MP = int;//新
typedef void(*pFun)();//旧
using PFun = void(*)();//新
typedef char str[10];//旧
using Str = char[10];//新
6.新的for循环语法规则
#include<iostream>
int main() {
int arr2[10] = { 1,2,3,4,5,6,7,8,9,0 };
for (int i = 0; i < 10; i++) {
std::cout << arr2[i] << '\t';
}
std::cout<<std::endl;
//新
for (auto i : arr2) {
std::cout << i << '\t';
}
}
这个方法只能用来遍历数组或者容器,i所代表的是里面存储的数据元素。指针不能这样遍历
从面向过程到面向对象
面向过程的优缺点
优点
- 程序结构简单,仅由三种基本的结构(顺序、选择、循环)组成,我们就可以解决任何问题。所以对于面向过程要专注于逻辑的学习,而不需要学习记忆很多语法
- 把大问题分解为小问题解决,把小问题解决了就相当于把大问题解决了,这样会使问题简单化
- 自上往下,一步步的完善,也就是先从整体角度看待问题,然后列出解决问题需要的步骤,再逐步去完善。这样会让我们全面地考虑问题,使得我们对整个程序的逻辑结构清楚明了
缺点
- 在面向过程的时候,数据和操作往往都是分离的。如果数据的结构改变,那么操作数据的函数就不得不重写,这个代价就比较大
- 数据一般都不具有封装性,很多变量都是暴露出来的,容易被篡改
- 当多人协作开发的时候问题就更多了,比如一些标识符重名,每个人之间的项目逻辑不清楚
有这样一个比喻,面向过程是炒饭,面向对象是盖饭;我们选择了鱼香肉丝盖饭,想换成宫保鸡丁盖饭,不用更换米饭,把上面那层菜更换一下即可;而炒饭却不能这样,但是炒饭更入味。所以各有各的好处,就看你如何使用了。
它们也是思维方式的不同,既然讲到饭了,我们就来说说做饭。面向过程是做饭的过程,比如洗菜、开火、放菜、放调料,是一个过程。而面向对象,是把菜、锅、人各看成是一个对象。菜有品种、颜色、形状等,锅有大小、性能等,人可能是不同级别的厨师等。而锅能点火加热菜,人能使用工具炒菜,它们之间产生某些行为就是做饭。
我们在学习过程中会慢慢体会和了解更多…
【C++】类和对象