【C++】从C到C++

embedded/2024/11/22 7:18:17/

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所代表的是里面存储的数据元素。指针不能这样遍历

从面向过程到面向对象

面向过程的优缺点

优点

  • 程序结构简单,仅由三种基本的结构(顺序、选择、循环)组成,我们就可以解决任何问题。所以对于面向过程要专注于逻辑的学习,而不需要学习记忆很多语法
  • 把大问题分解为小问题解决,把小问题解决了就相当于把大问题解决了,这样会使问题简单化
  • 自上往下,一步步的完善,也就是先从整体角度看待问题,然后列出解决问题需要的步骤,再逐步去完善。这样会让我们全面地考虑问题,使得我们对整个程序的逻辑结构清楚明了

缺点

  • 在面向过程的时候,数据和操作往往都是分离的。如果数据的结构改变,那么操作数据的函数就不得不重写,这个代价就比较大
  • 数据一般都不具有封装性,很多变量都是暴露出来的,容易被篡改
  • 当多人协作开发的时候问题就更多了,比如一些标识符重名,每个人之间的项目逻辑不清楚

有这样一个比喻,面向过程是炒饭,面向对象是盖饭;我们选择了鱼香肉丝盖饭,想换成宫保鸡丁盖饭,不用更换米饭,把上面那层菜更换一下即可;而炒饭却不能这样,但是炒饭更入味。所以各有各的好处,就看你如何使用了。

它们也是思维方式的不同,既然讲到饭了,我们就来说说做饭。面向过程是做饭的过程,比如洗菜、开火、放菜、放调料,是一个过程。而面向对象,是把菜、锅、人各看成是一个对象。菜有品种、颜色、形状等,锅有大小、性能等,人可能是不同级别的厨师等。而锅能点火加热菜,人能使用工具炒菜,它们之间产生某些行为就是做饭。

meal

我们在学习过程中会慢慢体会和了解更多…

【C++】类和对象


http://www.ppmy.cn/embedded/139555.html

相关文章

-bash: ./kafka-topics.sh: No such file or directory--解决方案

使用./kafka-topics.sh脚本出现以下错误 其实就是没在该脚本所在的目录运行&#xff0c;使用docker安装kafka的话&#xff0c;该脚本一般放在Kafka安装目录中的/opt/bitnami/kafka/bin 先启动并进去一个Kafka容器&#xff1a; docker start kafka-0 docker exec -it kafka-0…

Makefile 之 join

join $(join <list1>,<list2> ) 名称&#xff1a;连接函数——join。 功能&#xff1a;把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多&#xff0c; 那么&#xff0c;<list1>中的多出…

“闲置经济”成新消费趋势,万物新生长期成长性如何?

2024年&#xff0c;“以旧换新”成为消费热词。以“史上最长”双11为分界点&#xff0c;以旧换新进入下半场&#xff0c;消费市场将怎么发展&#xff0c;依然备受关注。 值得关注的是&#xff0c;自以旧换新工作启动以来&#xff0c;新产品销售量上行的同时&#xff0c;也带来…

【MATLAB】续行符号对字符串失效

前言 之前对于遇到的问题一般都是在之前的一篇文章后面更新&#xff0c;比如这样的: (原文链接) 现在想想这样其实不够直观&#xff0c;也不方便查找&#xff0c;所以计划之后如果遇到问题就直接记录成一篇文章&#xff0c;反正在一个专栏也好找。 问题描述 一般来说&#xff…

Android开发实战班 -网络编程 - Retrofit 网络请求 + OkHttp 使用详解

在现代 Android 应用开发中&#xff0c;网络编程是必不可少的一部分。Retrofit 是 Square 公司推出的一款类型安全的 HTTP 客户端库&#xff0c;简化了与 RESTful API 的交互。Retrofit 基于 OkHttp&#xff0c;并提供了简洁的接口定义和强大的功能&#xff0c;如异步请求、请求…

ubuntu, 安装部署comfyui,记录2:下载模型GGuf及测试

0.清除工作流 1.安装manager 2024年最新ComfyUI汉化及manager插件安装详解&#xff01;_comfyui-manager-CSDN博客 ComfyUI Manager安装 转到ComfyUI的安装目录ComfyUI/custom_nodes; 使用git拉取ComfyUI Manager&#xff0c;git clone https://github.com/ltdrdata/Comf…

Java Database Connectivity (JDBC + Servlet)

Java Database Connectivity (JDBC)是一个Java API&#xff0c;用于与数据库进行连接和操作。通过JDBC&#xff0c;Java程序可以与各种关系型数据库进行通信&#xff0c;执行SQL查询、更新数据等操作。 一、Java连接数据库两种方式 ​​​​​ ​​ 二、Java中…

详解Rust结构体struct用法

文章目录 定义和实例化可变性构造函数方法定义特殊结构体输出结构体与C结构体的差异 Rust的结构体(struct)是一种自定义的数据类型&#xff0c;允许开发者命名和包装多个相关的值&#xff0c;以形成有意义的数据组合。在Rust中结构体不仅用于数据组织&#xff0c;还密切结合了R…