[C.C++] 【C++ 笔记】从 C 到 C++:核心过渡 (上)

444 0
Honkers 2026-5-11 10:29:00 来自手机 | 显示全部楼层 |阅读模式

前言:

C++ 是一门高效、灵活且功能强大的通用编程语言,由 Bjarne Stroustrup 于 1979 年在贝尔实验室开发。

它通常被视为 C 语言的延伸,在 C 语言的基础上增加了面向对象编程(OOP)和泛型编程的支持,同时C++ 是一门 “难学但上限极高”的语言,如果追求极致的程序运行效率,或者需要深入理解计算机底层运作原理,C++ 是必修课。

一、C与C++程序

C语言输出Hello World:

代码语言:javascript

AI代码解释

  1. include <stdio.h>
  2. int main()
  3. {
  4. printf("Hello World\n");
  5. return 0;
  6. }
复制代码

C++输出Hello World:

代码语言:javascript

AI代码解释

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout<<"Hello World"<<endl;
  6. return 0;
  7. }
复制代码

我们发现:C语言和C++虽然同宗同源,但即使是输出简单的 "Hello World",其背后的设计理念也有很大不同。 ①C语言偏向“面向过程”,注重直接的函数调用; ②C++偏向“面向对象”,引入了流(Stream)和命名空间的概念。 所以,想吃透 C++ 的第一个程序,我们需要先掌握必要的前置知识。

二、命名空间

对于初学C++的帅观众,肯定会疑惑这句代码是什么意思,在C语言中从来没有看见过。

代码语言:javascript

AI代码解释

  1. using namespace std;
复制代码

其实,命名空间(Namespace) 是 C++ 为了解决 C 语言中“命名冲突”这一痛点而引入的关键特性。 因为在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。 而使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

2.1 为什么会出现命名冲突

例如:在头文件中,包含一个名为rand的函数,其原型如下:

rand函数原型: int rand (void); 函数名:rand 返回值:int 参数:void,不需要传参。 功能:返回一个伪随机整数

代码语言:javascript

AI代码解释

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int rand = 10;
  4. int main()
  5. {
  6. // 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”
  7. printf("%d\n", rand);
  8. return 0;
  9. }
复制代码

编译报错原因: 在不知道该函数的前提下,当你编写一个程序时,定义了一个名字也为 “rand” 的变量,此时命名冲突就发生了,编译器会认为rand进行了重定义。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行