从C到C++——探索C++的基本组成与核心语法

前言

如果你已经掌握了C语言的基本语法,恭喜你,学习C++会变得更加得心应手。C++ 是 C 的超集,不仅继承了 C 的灵活与高效,还引入了强大的面向对象编程思想和现代化语法特性。本篇文章将带你从 C 的基础出发,探索 C++ 的基本组成和核心语法,理解其相对于 C 的增强与改进之处。


一、C到C++:语言特性概览

1. C++的增强与特点

相较于 C,C++ 提供了以下新特性:

  1. 面向对象支持:如类与对象、继承、多态。
  2. 类型安全增强:如 const 修饰符,nullptr 替代空指针。
  3. 标准库扩展:提供了 STL(标准模板库),如容器、算法等。
  4. 新语法特性:如 auto、基于范围的 for 循环。
2. C++ 程序的基本结构

C++ 的程序结构与 C 十分类似,但加入了 namespace 和更灵活的输入输出方式:

​
#include <iostream>  // 标准输入输出头文件int main() {  std::cout << "Hello, C++!" << std::endl;  return 0;  
}​

变化点解析

  • #include <iostream>:C++ 使用 <iostream> 替代 C 中的 <stdio.h>,支持面向对象的输入输出流。
  • std::cout:输出流对象,功能类似于 C 中的 printf,但更易扩展。

二、C++关键语法与C语言的对比

1. 输入与输出

C++ 提供了流式输入输出,相比于 C 的 scanfprintf 更加直观和安全:

​
#include <iostream>int main() {  int age;  std::cout << "Enter your age: ";  // 输出提示  std::cin >> age;                 // 从标准输入读取数据  std::cout << "Your age is: " << age << std::endl;  return 0;  
}​

改进点

  • 无需手动格式化(如 %d 等),自动处理类型匹配。
  • 可链式操作:std::cout << "A" << "B";

2. 常量与类型安全

C++ 引入了 constnullptr,增强了对常量和空指针的处理:

  • 常量
​
const double PI = 3.14159;  
PI = 3.14;  // 错误,const 修饰的变量不可修改  ​
  • 空指针
​
int* ptr = nullptr;  // 替代 C 中的 NULL  
if (ptr == nullptr) {  std::cout << "Pointer is null." << std::endl;  
}​

为什么重要?

  • const 提高代码的可读性和安全性。
  • nullptr 明确了指针的语义,避免了空指针相关的错误。

3. 引用与指针

C++ 引入了引用(reference),提供了更简洁的变量访问方式:

  • 引用的特点
    • 必须初始化,不能改变绑定对象。
    • 更安全且易读,减少了指针操作的复杂性。

示例:引用代替指针传参

​
void swap(int& a, int& b) {  // 使用引用int temp = a;  a = b;  b = temp;  
}int main() {  int x = 10, y = 20;  swap(x, y);  // 无需使用地址符  std::cout << "x = " << x << ", y = " << y << std::endl;  return 0;  
}​

对比 C 的指针传参

​
void swap(int* a, int* b) {  int temp = *a;  *a = *b;  *b = temp;  
}​

C++ 中使用引用传参更直观,代码可读性更高。


4. 自动类型推导:auto 关键字

C++11 提供了 auto,可以让编译器推导变量类型:

​
auto x = 10;     // 推导为 int  
auto y = 3.14;   // 推导为 double  
auto z = x + y;  // 推导为 double  ​

优势:减少冗余代码,特别是在定义复杂类型时(如迭代器)。


三、C++中的其他增强特性

1. 命名空间(namespace

为了解决命名冲突问题,C++ 引入了命名空间:

​
#include <iostream>  namespace Math {  const double PI = 3.14159;  double square(double x) {  return x * x;  }  
}int main() {  std::cout << "PI: " << Math::PI << std::endl;  std::cout << "Square of 5: " << Math::square(5) << std::endl;  return 0;  
}​

通过命名空间避免了多个模块中的变量或函数名冲突。


2. 基于范围的 for 循环

C++11 简化了循环操作:

​
#include <iostream>  
#include <vector>  int main() {  std::vector<int> numbers = {1, 2, 3, 4, 5};  for (int num : numbers) {  std::cout << num << " ";  }  return 0;  
}​

相比于传统 for 循环,基于范围的循环更简洁且易读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YARN 集群

一、集群角色 1.1 概述 Apache Hadoop YARN是一个标准的Master/Slave集群&#xff08;主从架构&#xff09;。其中ResourceManager&#xff08;RM&#xff09; 为Master&#xff0c; NodeManager&#xff08;NM&#xff09; 为 Slave。常见的是一主多从集群&#xff0c;也可以…

ASP.NET Core - .NET 6 以上版本的入口文件

ASP.NET Core - .NET 6 以上版本的入口文件 自从.NET 6 开始&#xff0c;微软对应用的入口文件进行了调整&#xff0c;移除了 Main 方法和 Startup 文件&#xff0c;使用顶级语句的写法&#xff0c;将应用初始化的相关配置和操作全部集中在 Program.cs 文件中&#xff0c;如下&…

云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换

Video-Background-Removal 是一款革命性的视频背景替换工具&#xff0c;旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户&#xff0c;这款软件都能让你在几秒钟内改变背景&#xff0c;完全消除限制&#xff0c;随心所欲&#xff0c;随时随地想换就换&am…

独立开发者工具集:AppSumo网站科普

独立开发者经常会访问 AppSumo&#xff0c;原因在于以下几点&#xff1a; 推广自己的产品&#xff1a; AppSumo 对独立开发者来说是一个很好的分发平台&#xff0c;能够帮助他们快速触达大量潜在用户。通过在 AppSumo 上发布限时优惠&#xff0c;开发者可以获得更多的曝光、用…

Apache Hop从入门到精通 第三课 Apache Hop下载安装

1、下载 官方下载地址&#xff1a;https://hop.apache.org/download/&#xff0c;本教程是基于apache-hop-client-2.11.0.zip进行解压&#xff0c;需要jdk17&#xff0c;小伙伴们可以根据自己的需求下载相应的版本。如下图所示 2、下载jdk17&#xff08;https://www.microsoft…

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs&#xff1a;基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库&#xff0c;专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 AI浪…

010:传统计算机视觉之大津算法初探

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测&#xff0c;从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用&#xff0c;那就是把图片的前景和…

【Redis】初识分布式系统

目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文&#xff0c;将根据分布式系统的演进一步一步介绍每一种架构的形式&#xff0c;最后为大家总结了一些分布式中常用的…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道 特点&#xff1a; 覆盖范围有限&#xff1a;通常局限在几千米范围内&#xff0c;比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高&#xff1a;一般能达到 10Mbps…

配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例

配置 One API ChatGPT-Next-Web&#xff0c;以讯飞星火认知大模型为例 1.0 One API 配置1.1 获取大模型 API1.2 配置 OneAPI 渠道1.3 配置OneAPI 令牌 2.0 ChatGPT-Next-Web 配置 同步发布在个人笔记配置 One API ChatGPT-Next-Web&#xff0c;以讯飞星火认知大模型为例 上一…

Leetcode - 147双周赛

目录 一、3407. 子字符串匹配模式二、3408. 设计任务管理器三、3409. 最长相邻绝对差递减子序列四、3410. 删除所有值为某个元素后的最大子数组和 一、3407. 子字符串匹配模式 题目链接 字符串匹配问题&#xff0c;把字符串 p 分成两段 、&#xff0c;i 是 ’ * ’ 的下标&am…

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群&#xff0c;只需按下图所示位置添加dm_svc.conf文件&#xff0c;并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现&#xff0c;基于.net 6开发的WebApi&#xff0c;编译为ANYCPU&…

探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码

嘿&#xff0c;小伙伴们&#xff01;今天咱们要把 JMeter 里超厉害的 Interleave Controller&#xff08;交错控制器&#xff09;研究个透&#xff0c;让你从新手直接进阶成高手&#xff0c;轻松拿捏各种性能测试难题&#xff01; 一、Interleave Controller 深度剖析 所属家族…

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放&#xff0c;导致系统内存逐渐耗尽&#xff0c;最终可能造成程序崩溃或性能下降。在C中&#xff0c;内存泄漏通常发生在使用new或malloc等分配内存的操作时&#xff0c;但没有正确地使用delete或free来释放这块内存。 在日常开发过程…

服务器/电脑与代码仓gitlab/github免密连接

git config --global user.name "xxxx" git config --global user.email "xxxxxx163.com" #使用注册GitHub的邮箱 生成对应邮箱的密码对 ssh-keygen -t rsa -b 4096 -C "xxxxxx163.com" 把公钥id_rsa.pub拷贝到github中 Setting----->…

Rubyer-WPF:打造优雅、精致的 WPF 用户界面

在桌面应用开发领域&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;凭借其强大的 UI 设计能力和丰富的功能&#xff0c;始终是开发者们青睐的工具之一。今天&#xff0c;我将为大家介绍一款专注于 WPF UI 设计的优秀项目——Rubyer-WPF&#xff0c;它…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

《Spring Framework实战》15:4.1.4.6.方法注入

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中&#xff0c;容器中的大多数bean都是单例&#xff08;singletons&#xff09;的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时&#xff0c;通常通过将一个bean定义为另一个…