初阶C++之C++入门基础
大家好!欢迎来到C++篇学习,这篇文章的内容不会很难,为c++的引入,c++的重点内容将在第二篇的文章中讲解,届时难度会陡然上升,请做好准备!
我们先看网络上的一个梗:21天内⾃学精通C++

好了,现在我们要开始写第一个c++程序了:hello world
1. C++的第⼀个程序
#include<stdio.h>
int main()
{printf("hello world");return 0;
} #include<iostream>
using namespace std;
int main()
{cout << "hello world" << endl;return 0;
} 2.命名空间
2.1 namespace的价值
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{ // 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数” printf("%d\n", rand); return 0;
}
#include <stdio.h>
#include <stdlib.h>
// 1. 正常的命名空间定义
// bit是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。
// 我们这里⽤的是bit,⼤家下去以后⾃⼰练习可以考虑⽤⾃⼰名字缩写,如张三:zs
namespace bit
{ // 命名空间中可以定义变量/函数/类型 int rand = 10; int Add(int left, int right) { return left + right;}struct Node { struct Node* next; int val; };
}
int main()
{ // 这⾥默认是访问的是全局的rand函数指针printf("%p\n", rand); // 这⾥指定bit命名空间中的rand printf("%d\n", bit::rand); return 0;
} //2. 命名空间可以嵌套
#include <stdio.h>
#include <stdlib.h>
namespace bit
{ // 鹏哥 namespace pg {int rand = 1; int Add(int left, int right) { return left + right; } }// 杭哥 namespace hg { int rand = 2; int Add(int left, int right) { return (left + right)*10; } }
}
int main()
{ printf("%d\n", bit::pg::rand);printf("%d\n", bit::hg::rand); printf("%d\n", bit::pg::Add(1, 2)); printf("%d\n", bit::hg::Add(1, 2)); return 0;
} 结果如下:

2.3 命名空间使用
#include<stdio.h>
namespace bit
{ int a = 3; int b = 1;int c = 10;int d = 100;
}
using bit::b; //using将命名空间中成员(b)展开
using namespace bit; // 展开命名空间中全部成员
int main()
{ // 对a指定命名空间访问printf("%d\n", bit::a); printf("%d\n", b);printf("%d\n", c + d);return 0;
}
结果附上:

3.C++输入&输出
#include<iostream>
using namespace std; //相当于我们的#include<stdio.h>
int main()
{int a = 0;double b = 0.1;char c = 'x';cout << a << " " << b << " " << endl; //cout相当于printfstd::cout << a << " " << b << " " << std::endl;cin >> a; //cin相当于scanfcin >> b >> c;cout << a<<"\n";cout << b << endl << " " << c;return 0;
}
结果如下:

4. 缺省参数
#include <iostream>
#include <assert.h>
using namespace std;
void Func(int a = 0)
{ cout << a << endl;
}
int main()
{Func(); // 没有传参时,使⽤参数的默认值 Func(10); // 传参时,使⽤指定的实参 return 0;
}
结果如下:
例2:
#include <iostream>
using namespace std;
// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{ cout << "a = " << a << endl;cout << "b = " << b << endl; cout << "c = " << c << endl << endl;
}
// 半缺省
void Func2(int a, int b = 10, int c = 20)
{cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl << endl;
}
int main()
{Func1(); Func1(1); Func1(1,2);Func1(1,2,3); Func2(100); Func2(100, 200); Func2(100, 200, 300); return 0;
}
结果如下:

5. 函数重载
5.1 参数类型不同
#include <iostream>
using namespace std;// 1、参数类型不同 int Add(int left, int right) { cout << "int Add(int left, int right)" << endl;return left + right; }double Add(double left, double right) { cout << "double Add(double left, double right)" << endl; return left + right;
}
int main()
{ Add(10, 20); Add(10.1, 20.2); return 0;
}
证明了c++在函数名相同时 ,参数类型不同,仍可进行传参并成功运行,不会报错!
5.2 参数个数不同
#include <iostream>
using namespace std;// 2、参数个数不同 void f() { cout << "f()" << endl; }void f(int a) { cout << "f(int a)" << endl; }
int main()
{ f(); f(10); return 0;
}
结果如图:
证明了c++在函数名相同时 ,参数个数不同,仍可进行传参并成功运行,不会报错!
5.3 参数类型顺序不同
#include <iostream>
using namespace std;// 3、参数类型顺序不同 void f(int a, char b) { cout << "f(int a,char b)" << endl;}void f(char b, int a) { cout << "f(char b, int a)" << endl; }
int main()
{ f(10, 'a'); f('a', 10); return 0;
}
结果如图:

证明了c++在函数名相同时 ,参数类型顺序不同,仍可进行传参并成功运行,不会报错!
5.4 错误示例
#include <iostream>
using namespace std;
void f1()
{cout << "f()" << endl;
}
void f1(int a = 10)
{ cout << "f(int a)" << endl;
}
int main()
{ f1();return 0;
}
此时,编译器会报错!!! 因为调用时,存在歧义,编译器不知道调用谁 !

6. 引用
6.1 引用的概念和定义
我们来看代码理解一下:
#include<iostream>
using namespace std;
int main()
{ int a = 0; // 引⽤:b和c是a的别名 int& b = a; int& c = a; // 也可以给别名b取别名,d相当于还是a的别名 int& d = b; ++d; // 这⾥取地址我们看到是⼀样的 cout << &a << endl; cout << &b << endl; cout << &c << endl; cout << &d << endl; cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;return 0;
}
运行结果:

6.2 引用的特性
#include<iostream>
using namespace std;
int main()
{ int a = 10; // 编译报错:“ra”: 必须初始化引⽤ //int& ra; int& b = a; int d = 20; // 这⾥并非让b引⽤c,因为C++引⽤不能改变指向,// 这⾥是⼀个赋值 b = d;cout << &a << endl; cout << &b << endl; cout << &d << endl; return 0;
}
6.3 引用的使用
例一:
#include <iostream>
using namespace std;
void Swap(int& rx, int& ry)
{ int tmp = rx;rx = ry; ry = tmp;
}
int main()
{ int x = 0, y = 1; cout << x << " " << y << endl; Swap(x, y); cout << x << " " << y << endl; return 0;
} 结果如下:
6.4const引用
int main()
{const int a = 10; // 编译报错:error C2440: “初始化”: ⽆法从“const int”转换为“int &” // 这⾥的引⽤是对a访问权限的放⼤ //int& ra = a; // 这样才可以 const int& ra = a; // 编译报错:error C3892: “ra”: 不能给常量赋值 //ra++; // 这⾥的引⽤是对b访问权限的缩⼩ int b = 20; const int& rb = b; // 编译报错:error C3892: “rb”: 不能给常量赋值 //rb++; return 0;
} #include<iostream>
using namespace std;
int main()
{ int a = 10; const int& ra = 30; // 编译报错: “初始化”: ⽆法从“int”转换为“int &” ,此时我们加上const即可// int& rb = a * 3; const int& rb = a*3; double d = 12.34; // 编译报错:“初始化”: ⽆法从“double”转换为“int &” ,此时我们加上const即可// int& rd = d; const int& rd = d; return 0;
} 6.5 指针和引用的关系
(面试愿意问关系题)
7. nullptr
NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

#include<iostream>
using namespace std;
void f(int x)
{ cout << "f(int x)" << endl;
}
void f(int* ptr)
{ cout << "f(int* ptr)" << endl;
}
int main()
{ f(0);
// 本想通过f(NULL)调⽤指针版本的f(int*)函数,但是由于NULL被定义成0,调⽤了f(int x),因此与程序的初衷相悖。
f(NULL);
f((int*)NULL);
// 编译报错:error C2665: “f”: 2 个重载中没有⼀个可以转换所有参数类型 //f((void*)NULL); f(nullptr); return 0;
}

8. inline
inline函数并不总是能提高程序的执行效率,因为如果函数体过大,编译器可能会忽略 inline关键字,将其当作普通函数处理 • C语言实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不方便调
相关文章:
初阶C++之C++入门基础
大家好!欢迎来到C篇学习,这篇文章的内容不会很难,为c的引入,c的重点内容将在第二篇的文章中讲解,届时难度会陡然上升,请做好准备! 我们先看网络上的一个梗:21天内⾃学精通C 好了&am…...
ODOO学习笔记(7):模块化架构(按需安装)
一、Odoo模块化架构概述 Odoo是一个功能强大的企业资源规划(ERP)系统,其模块化架构是它的核心优势之一。这种架构允许系统通过添加、移除或修改不同的模块来灵活地适应企业的各种业务需求。 核心模块与自定义模块: Odoo本身带有一…...
Java的dto,和多表的调用
1理论 需求是新增菜品eg:菜名:豆腐脑;口味:甜口,咸口, 菜单表:dish;口味表dish_flavor; 1dto:数据传输对象 新建一个dishDto对象有两个表里的属性 2用到两个表,dish,d…...
时序数据库TimescaleDB安装部署以及常见使用
文章目录 一、时序数据库二、TimescaleDB部署1、repository yum仓库配置2、yum在线安装3、插件配置4、TimescaleDB使用登录pg创建插件使用超表 一、时序数据库 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库&#x…...
MG算法(英文版)题解
翻译: 考虑一个加法流,其中一个特定项目出现 n^(1/2) 次,并且有 n - n^(1/2) - 1 个其他不同的项目,每个项目出现一次。在应用 Misra-Gries(MG)算法时,应该选择哪个 ε(epsilon&…...
2-UML概念模型测试
1. (单选题, 1.0 分) UML中的关系不包括()。 A. 抽象B. 实现C. 依赖D. 关联 我的答案:A正确答案: A 知识点: UML的构成 1.0分 2. (单选题, 1.0 分) 下列事物不属于UML结构事物的是()。 A. 组件B. 类C. 节点D. 状…...
人工智能(AI)对于电商行业的变革和意义
 参考, x.content content --EXTRACTVALUE(x.Content, //zlxml//document//subdoc[antetypeid"3C38A8DAB01C473A9074A8EDD0B8553"]//utext) 主治医师, --EXTRACTVALUE(x.…...
RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段
🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…...
使用 Web Search 插件扩展 GitHub Copilot 问答
GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码,还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能,微软发布了一个名为 Web Search 的插件&am…...
workerman的安装与使用
webman是一款基于workerman开发的高性能HTTP服务框架。webman用于替代传统的php-fpm架构,提供超高性能可扩展的HTTP服务。你可以用webman开发网站,也可以开发HTTP接口或者微服务。 除此之外,webman还支持自定义进程,可以做worker…...
QtQuick.Controls 控件介绍(都有哪些type)
这里写目录标题 主要控件 官方示例1. quickcontrols示例示例1 控制controlsSliders滑块bottom与tab 示例2 系统对话框 systemdialogs示例3 仪表盘示例4 uiforms 表格-客户通讯录 2. quickcontrols2示例1 gallery 展示2 flat Style 扁平化 帮助文档 主要控件 Button:…...
Unity导出APK加速与导出失败总结(不定时更新)
APK导出加速 1、修改配置文件: 需要修改的文件位置:编辑器安装路径/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates 1.1 settingsTemplate.gradle文件修改 直接附上最终效果: pluginManagement {repositories {**ART…...
域名绑定服务器小白教程
域名绑定与 Docker 容器部署指南 1. 获取云服务器公网 IP 登录云服务提供商控制台记录服务器公网 IP(例:123.456.78.90) 2. 配置域名 DNS 解析 登录域名注册商控制台添加 A 记录: 主机记录:类型:A值&am…...
用 Collections.synchronizedSet 创建线程安全的 HashSet
在 Java 中,HashSet 本身并不是线程安全的。如果在多线程环境下使用 HashSet,你需要采取额外的同步措施来保证线程安全。Collections 工具类提供了一种简便的方法来创建线程安全的集合——synchronizedSet 方法。这种方法通过在所有公共方法上添加同步块…...
【深度学习】模型参数冻结:原理、应用与实践
在深度学习领域,模型参数冻结是一种重要的技术手段,它在模型训练和优化过程中有着广泛的应用。本文将详细介绍模型参数冻结的相关概念、应用场景、在代码中的实现方式以及一些实际的案例分析。 一、模型参数冻结的概念 在深度学习模型的训练过程中&…...
数字后端教程之Innovus report_property和get_property使用方法及应用案例
数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性,主要有cell,net,PG Net,Pin,时钟clock,时序库lib属性,Design属性,timing path,timin arc等…...
JS中console对象内部提供调试方法
console.log() console.log() 是最常用的输出方法,用于将信息输出到浏览器控制台,通常用于普通的调试信息。 用途: 打印普通的消息、变量、对象等。 let user { name: "Alice", age: 25 }; console.log(user); // 输出对象 console.log(&…...
python设计模式
一、单例模式 学习目标:掌握单例模式的作用和写法 可以明显的看出他两是独立的对象,而且是两个完全不同的id 当我们希望是s1和s2是同一个对象,这就是我们所说的单例模式。 最后获得的都是同一个对象,这样就可以避免去重复的创建…...
机器学习 笔记
特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
