当前位置: 首页 > news >正文

C++启航:从0到1,解锁面向对象编程的第一把密钥

🔥个人主页:@ꪔ小林Y
🎬作者简介C++领域的学习者,专注知识拆解与代码实践,代码世界的“拆题玩家”,一边啃底层原理,一边写落地demo,主打把复杂逻辑掰成“新手能懂的样子”
📖个人专栏:《C++小白闯关日记》,《C语言小白闯关日记》
⭐️代码信条每一行C++代码都是成长的脚印,每一次调试成功都是对坚持的回应
在这里插入图片描述

C++入门基础

目录:

  • C++入门基础
    • 一.C++的起源和版本更新
    • 二. C++参考文档
    • 三.C++在工作领域中的应用
    • 四.C++相关书籍
    • 五.C++的第一个程序
    • 六.命名空间
      • 1.C语言的弊端:命名冲突
      • 2.namespace关键字
      • 3.**namespace的使用**
    • 七.C++的输入&输出

一.C++的起源和版本更新

  • C++的起源可以追溯到1979年,初步是因为有人感受到现有语言(如C语言)在表达能力,可维护性和可扩展性方面的不足,在C语言的基础上添加了面向对象的特性,逐步扩展,直到1998年,C++的ANSI/IS0标准被投入使用。
  • 随着C++版本更新,更新了以下几种版本的C++,但投入大多使用的是前两个即C++98和C++11
    在这里插入图片描述

二. C++参考文档

  • https://legacy.cplusplus.com/reference/
  • https://zh.cppreference.com/w/cpp
  • https://en.cppreference.com/w/

三.C++在工作领域中的应用

C++的应用领域服务器端,游戏(引擎),机器学习引擎,音视频处理,嵌入式软件,电信设备,金融应用,基础库,操作系统,编译器,基础架构,基础工具,硬件交互等多方面

四.C++相关书籍

《C++ Primer》,《STL源码剖析》,《Effctive C++》

五.C++的第一个程序

同样的,我们依然从hello world入手

#include<iostream>
using namespace std;
int main()
{cout << "hello world\n" << endl;return 0;
}

在这里插入图片描述
具体为什么这样写以及每一步的作用究竟是为什么,我们请继续往下研究

六.命名空间

1.C语言的弊端:命名冲突

在这里插入图片描述
在这里插入图片描述
当我们在调试运行上面这个程序时,会出现报错。原因就是因为定义的rand和<stdlib.h>库中的rand函数出现了命名冲突,那该如何解决呢?这就得提到namespace关键字了

2.namespace关键字

  • namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量。
  • C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间和类域不影响变量生命周期。
#include<stdio.h>
namespace name
{
//命名空间中可以定义变量/函数/类型int rand=10;int Add(int left,int right){return left+right;} struct Node{struct Node* next;int val;};
}
  • namespace只能定义在全局,可以嵌套定义
  • 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突
  • c++标准库都存放在一个叫std(standard)的命名空间中

3.namespace的使用

编译器语法查找确认,默认都是先局部查找,再全局查找,没有找到就报错未声明标识符。这里我们还涉及到一个标识符“::”即域作用限定符

  • (1)指定命名空间访问,项目中推荐这种方式
  • (2)using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。
  • (3)展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。
#include<stdio.h>
#include<stdlib.h>
namespace test
{int rand = 10; struct Node{struct Node* next;int val;};
}
int a = 1;
int main()
{int a = 0;printf("%d\n", a);//::域作用限定符printf("%d\n", ::a);// 左边什么都没有代表的是全局域printf("%p\n", rand);printf("%d\n", test::rand);//::左边是域的名称struct test::Node node;return 0;
}

在这里插入图片描述

七.C++的输入&输出

  • < iostream >是InputOutputStream的缩写,是标准的输入、输出流库,定义了标准的输入、输
    出对象。
  • std::cin 是istream类的对象,它主要面向窄字符(narrowcharacters(oftypechar))的标准输
    ⼊流。
  • std::cout 是ostream类的对象,它主要面向窄字符的标准输出流。(cin和cout中的c意思是默认所有的输入输出都转换成char串)
  • std::endl 是一个函数,流插入输出时,相当于插⼊⼀个换行字符加刷新缓冲区。
  • <<是流插入运算符,>>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
  • std::cout & 换行& std::cin的练习使用:
#include<iostream>
int main()
{int i = 10;i << 5;double d = 1.1;std::cout << i;//流插入,将i类型的对象转换成字符串插入到cout中std::cout << i << " " << d;//可自动识别类型,任何变量,都转换成字符串插入到流中//换行的两种方法std::cout << "hello"<<'\n'<<"\n";//该方法不会刷新缓冲区std::cout << "world " << std::endl;//该换行会刷新缓冲区//std::cin的使用std::cin >> i >> d;std::cout << i << " " << d<<std::endl;return 0;
}

在这里插入图片描述
但是如果我们每次写都要完整的写出std::cout和std::cin便会非常麻烦,这就可以根据namespace的使用特性2和3来解决

#include<iostream>
using namespace std;
//1.全局展开
//但还要注意这种方法只适用于日常小练习程序
int main()
{int i = 100;double d=1.1;cout << i<<endl;cin >> i >> d;return 0}
#include<iostream>
#include<algorithm>
//2.当然我们也可以选择部分展开
using std::cout;
using std::endl;
int main()
{int i = 100;double d=1.1;cout << i<<endl;cin >> i >> d;return 0}

在io需求比较高的地方,如大部分输入的竞赛题中,加上以下3行代码,可以提高C++IO效率

int main()
{ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);}

作为C++学习博客的开篇,内容以基础概念梳理为主,希望能帮刚入门的朋友搭好第一块学习基石。如果文中有表述不准的地方,或是你有更清晰的理解思路,强烈欢迎在评论区留言交流—— 技术路上多碰撞,才能更快进步

觉得内容对你有帮助的话,别忘了点赞+收藏,方便后续回顾复习;想跟着一起系统学习C++的朋友,也可以点击关注,下一期我们会聚焦更进一步的学习,带你从理论走进实操。下期不见不散


文章转载自:

http://M1b6bvEK.brhxd.cn
http://1fKguUFY.brhxd.cn
http://Ak988Tum.brhxd.cn
http://Ljrl1xk2.brhxd.cn
http://SKN3tiBi.brhxd.cn
http://pvONoSKM.brhxd.cn
http://jZaXXvbm.brhxd.cn
http://NzbDaKj9.brhxd.cn
http://tZOS5cX4.brhxd.cn
http://5wr3MuSZ.brhxd.cn
http://TskPi2fu.brhxd.cn
http://corjY649.brhxd.cn
http://UNLtQRpD.brhxd.cn
http://4O3NIsDX.brhxd.cn
http://ePeR2w2K.brhxd.cn
http://4rj1HyWm.brhxd.cn
http://SBKu9n3H.brhxd.cn
http://mfyrcxSq.brhxd.cn
http://ACHdEOoR.brhxd.cn
http://6XDmH5xf.brhxd.cn
http://qKdXeYeX.brhxd.cn
http://qjGdJZ6E.brhxd.cn
http://KXraYyCi.brhxd.cn
http://Z0a6sx8R.brhxd.cn
http://w403Mpm1.brhxd.cn
http://Y6KfHyQW.brhxd.cn
http://oaxI6Umu.brhxd.cn
http://WrdqufM8.brhxd.cn
http://nlzNj4fE.brhxd.cn
http://vTm7rONI.brhxd.cn
http://www.dtcms.com/a/383890.html

相关文章:

  • 基于Dash和Plotly的交互式人体肌肉评分可视化系统[附源码】
  • Linux 开发工具(2)
  • Java进阶教程,全面剖析Java多线程编程,什么是多线程,笔记01
  • 论文参考文献交叉引用+中括号变成上标+自动生成目录方法
  • Linux:8_库制作与原理
  • Codeforces Round 1047 Div.3 DEFG补题
  • OWASP Top 10 最新版
  • 【脑电分析系列】第9篇:时频分析利器 — 小波变换与事件相关谱扰动(ERSP)的应用
  • struct的一些函数以及其他用法(析构、友元、构造、成员等)
  • c语言中实现线程同步的操作
  • 【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性问题
  • Springboot的自动配置原理?
  • 9 月 13 日科技前沿大揭秘:多领域创新闪耀
  • 基于少样本支持的一类学习的增量式生成对抗诊断:
  • TDengine 特殊选择函数 UNIQUE 用户手册
  • 状态机SMACH相关教程介绍与应用案例分析——机器人操作进阶系列 · 状态机篇
  • Transformer简介
  • 维星AI-AI驱动的精准获客:重塑数字营销新范式
  • 视觉SLAM第11讲:回环检测
  • Linux相关概念和易错知识点(45)(网络层、网段划分)
  • 因果推断 | 从因果树到因果森林:理论解析与代码实践
  • Spring MVC 九大组件源码深度剖析(七):ViewResolver - 视图解析的智慧
  • 【左程云算法09】栈的入门题目-最小栈
  • java设计模式三、创建者模式
  • 出现次数最多的字符 字符串处理
  • 根据IP获取用户信息和天气信息的方法
  • Paxos协议
  • 上网行为二层部署案例
  • XLua教程之热补丁技术
  • Linux 基本命令超详细解释第一期 | cd | pwd | ls | mkdir | rmdir