从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;如下&…

C语言导航 7.2函数的调用

第二节 函数的调用 调用基本概念 函数的实参与形参 函数的嵌套与递归 7.2.1调用基本概念 1.说明&#xff1a;函数的调用即是在指定位置&#xff0c;让函数执行相应任务。 2.方式&#xff1a;对于有返回值的函数&#xff0c;可在调用时对函数进行运算操作&#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…

C++实现设计模式---单例模式 (Singleton)

单例模式 (Singleton) 概念 单例模式 确保一个类在整个程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。 它是一种创建型设计模式&#xff0c;广泛用于需要共享资源的场景。 使用场景 配置管理器&#xff1a;程序中需要一个全局的配置对象。日志系统&#xff…

六十九:基于openssl实战验证RSA

RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种非对称加密算法&#xff0c;广泛应用于数据加密和数字签名领域。在实际开发和学习过程中&#xff0c;理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础&#xff0c;通过实例操作来验证和理解 RSA 的…

处理处理器的重排问题

每次写代码都要考虑重排问题会很繁琐且容易出错&#xff0c;但也不必过于担心&#xff0c;以下是一些建议可以帮助你应对&#xff1a; 理解重排的影响范围 并非所有代码都会受到重排的显著影响。一般来说&#xff0c;在单线程程序中&#xff0c;只要不涉及依赖特定顺序的外部…

服务器引导异常,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: ..…

PL/SQL语言的数据库交互

PL/SQL语言的数据库交互 引言 在当今的信息化时代&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;在各行各业中扮演着至关重要的角色。为了高效地与数据库进行交互&#xff0c;许多程序员、数据库管理员和系统分析师选择使用PL/SQL&#xff08;Procedural Language/…

解决: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;以讯飞星火认知大模型为例 上一…

Lock接口

java.util.concurrent.locks.Lock 接口是Java并发包中的一部分&#xff0c;它提供了比内置锁&#xff08;即 synchronized 关键字&#xff09;更灵活和强大的锁机制。通过使用 Lock 接口及其相关实现类&#xff0c;开发者可以获得更多的功能选项来控制线程间的同步行为&#xf…

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&…