前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C++篇】C++入门基础(一)

【C++篇】C++入门基础(一)

作者头像
我想吃余
发布于 2025-03-31 10:22:20
发布于 2025-03-31 10:22:20
6000
代码可运行
举报
文章被收录于专栏:C++篇C++篇
运行总次数:0
代码可运行

前言

C++是在C的基础上发展的语言,其初心本是弥补C的不足,不想却成了一门新的语言。C++兼容C的所有语法。 本文主要内容是讲解C++较C所补充的语法内容。

声明:本文学习需要C语言的基础,因为C++语法中与C重复的内容不会赘述。

1. C++的关键字(C++98)

C++共有63个关键字,其中包含C语言的32种。

💡:不建议去背这些关键字,得不偿失。后续学习中慢慢记忆乃上上策。


2. 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。

C语言的命名冲突问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

这里补充一下的概念。

2.1 作用域

C/C++中的作用域指的是变量、函数或其他标识符在程序中的可见范围。正确理解作用域有助于避免命名冲突并管理数据访问。

2.1.1 块作用域(局部作用域)
  • 定义:在 {} 内定义的变量(如函数体、ifforwhile 等代码块)。
  • 可见性:仅在定义它的块内有效
  • 示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void func() {
    int x = 10;          // 块作用域变量
    if (true) {
        int y = 20;      // 仅在 if 块内可见
    }
    // y 在此不可访问
}
2.1.2 全局作用域(文件作用域)

定义:在函数外定义的变量或函数,从定义处到文件末尾可见。

生命周期:整个程序运行期间存在。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int global = 100;         // 全局变量
void print() {
    cout << global;       // 可访问全局变量
}
2.1.3 命名空间作用域(C++特有)

定义:通过 namespace 组织的变量、函数或类,需通过命名空间限定符 :: 访问。(后文会对这个操作符详细讲解)

用途:避免命名冲突。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace MyNS {
    int x = 5;
}
int main() {
    cout << MyNS::x;     // 输出 5
}
2.1.4 类作用域(C++特有)

定义:类的成员变量和函数属于类作用域,需通过对象或类名访问。

静态成员:需在类外单独定义。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyClass {
public:
    static int static_var;
    void method() { /* ... */ }
};
int MyClass::static_var = 0; // 静态成员定义
2.2 命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

  1. 命名空间中可以定义变量/函数/类型。 如:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace wxcy
{
	int rand = 10;
	int Add(int a,int b)
	{
		return a + b;	
	}
	struct Node
	{
	struct Node* next;
	int val;
	};
}
  1. 命名空间可以嵌套
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// test.cpp
namespace N
{
	int a;
	int b;
	int Add(int left, int right)
	{
	  	return left + right;
	}
	namespace N2
	{
		  int c;
		  int d;
		  int Sub(int left, int right)
		  {
		    	return left - right;
		  }
	}
}
// test.h
namespace N
{
	int Mul(int left, int right)
	{
	  return left * right;
	}
}
//一个工程中的test.h和上面test.cpp中两个N会被合并成一个
  1. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

💡:一个命名空间就是定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

2.3 命名空间的使用

如何解决下面代码的问题呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace N
{
	int a = 0;
	int b = 1;
	int Add(int left, int right)
	{
	  	return left + right;
	}
	namespace N2
	{
		  int c = 6;
		  int d = 666;
		  int Sub(int left, int right)
		  {
		    	return left - right;
		  }
	}
}

int main()
{
// 编译报错:error C2065: “a”: 未声明的标识符
printf("%d\n", a);
return 0;
}

这里介绍一下作用域限定符:::它是一个双目操作符,通过 命名空间::标识符 访问命名空间内的内容。

  • 当局部变量与全局变量同名时,:: 可强制访问全局变量:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int x = 10; // 全局变量

void func() {
    int x = 20; // 局部变量
    cout << x;    // 输出局部变量 20
    cout << ::x;  // 输出全局变量 10

💡:全局作用域无名称,命名空间空着就好了。

命名空间的使用有三种方式:

  • 加命名空间名称及作用域限定符
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
  printf("%d\n", N::a);
  return 0;  
}
  • 使用using将命名空间中某个成员引入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using N::b;
int main()
{
  printf("%d\n", N::a);
  printf("%d\n", b);
  return 0;  
}
  • 使用using namespace 将命名空间展开
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using namespce N;
int main()
{
  printf("%d\n", N::a);
  printf("%d\n", b);
  Add(10, 20);
  return 0;  
}

3. C++的输入和输出

C语言中的输入输出是printf/scanf等等,C++中是什么呢?

C++实现示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}
  1. 使用cout标准输出对象(屏幕)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std
  2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
    • endlend line的缩写,相当于C语言中的\n
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;
int main()
{
 int a;
 double b;
 char c;
 
 // 可以自动识别变量的类型
 cin>>a;
 cin>>b>>c;
 
 cout<<a<<endl;
 cout<<b<<" "<<c<<endl;
 return 0;
}
  1. 控制输出格式,在C语言中,会用像%-6d这样的方式来控制格式。其实在C++中用cout控制格式非常不友好,因为C++兼容C的语法,所以我建议:当需要控制格式时,就用printf。取其精华去其糟粕。
std命名空间的使用惯例:
std命名空间的使用惯例:

4. 缺省参数

4.1 缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Func(int a = 0)
{
cout<<a<<endl;
}
int main()
{
Func();   // 没有传参时,使用参数的默认值
Func(10);  // 传参时,使用指定的实参
return 0;
}

没有传参时,就会默认使用缺省值a = 0.

4.2 缺省参数的分类
  • 全缺省参数 函数所有参数缺省
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Func(int a = 10, int b = 20, int c = 30)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}
  • 半缺省参数 部分参数缺省:有缺省参数也有不缺省参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Func(int a, int b = 10, int c = 20)
{
  cout<<"a = "<<a<<endl;
  cout<<"b = "<<b<<endl;
  cout<<"c = "<<c<<endl;
}

💡:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现,有声明的话就放在声明里。
  3. 缺省值必须是常量或者全局变量

5. 函数重载

C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}
// 2、参数个数不同
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}
// 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()
{
Add(10, 20);
Add(10.1, 20.2);
f();
f(10);
f(10, 'a');
f('a', 10);
return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据|附代码数据
此分析的目的是构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括 1258 天的股票收益
拓端
2023/07/07
3910
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化
普通的模型对于两个序列的波动分析一般是静态的,但是dcc-garch模型可以实现他们之间动态相关的波动分析,即序列间波动并非为一个常数,而是一个随着时间的变化而变化的系数。其主要用于研究市场间波动率的关系(点击文末“阅读原文”获取完整代码数据)。
拓端
2023/08/30
2140
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化
R语言多元(多变量)GARCH :GO-GARCH、BEKK、DCC-GARCH和CCC-GARCH模型和可视化|附代码数据
从Engle在1982发表自回归条件异方差(ARCH)模型的论文以来,金融时间序列数据的波动性就倍受关注。同时,近几年又出现了研究股票市场的波动传递性
拓端
2023/01/12
1.5K0
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化
普通的模型对于两个序列的波动分析一般是静态的,但是dcc-garch模型可以实现他们之间动态相关的波动分析,即序列间波动并非为一个常数,而是一个随着时间的变化而变化的系数。其主要用于研究市场间波动率的关系。
拓端
2023/02/16
2830
R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较|附代码数据
在本文中,波动率是众多定价和风险模型中的关键参数,例如BS定价方法或风险价值的计算。在这个模型中,或者说在教科书中,这些模型中的波动率通常被认为是一个常数
拓端
2023/02/14
7110
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析|附代码数据
最近我们被客户要求撰写关于ARMA-GARCH的研究报告,包括一些图形和统计输出。
拓端
2023/02/21
1.1K0
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的任务
拓端
2022/12/02
9900
R语言实现:基于GARCH模型的股市危机预警
作者:huozi07 http://blog.csdn.net/huoz07/artile/details/48176587 为防范股票市场上的不确定性和风险,有效地度量股票指数收益率的波动性显得尤为重要。本文运用GARCH族模型拟合了股票指数收益率的波动性方程并实证研究了全球有代表性的上证综指、NASDAQ指数、德国DAX、日本日经指数。结果表明四个国家股票收益率均有聚集性、持续性,股票市场存在着冲击的非对称性。具体而言,美国、德国、日本股票市场对利空消息敏感,而对利好消息保持谨慎。而中国对利好利空消息均
机器学习AI算法工程
2018/03/14
5.3K0
R语言实现:基于GARCH模型的股市危机预警
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格|附代码数据
时间序列分析是统计学中的一个主要分支,主要侧重于分析数据集以研究数据的特征并提取有意义的统计信息来预测序列的未来值
拓端
2022/12/21
1.4K0
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化|附代码数据
普通的模型对于两个序列的波动分析一般是静态的,但是dcc-garch模型可以实现他们之间动态相关的波动分析,即序列间波动并非为一个常数,而是一个随着时间的变化而变化的系数。其主要用于研究市场间波动率的关系
拓端
2023/05/10
3610
R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列|附代码数据
风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场风险
拓端
2023/02/23
1.3K0
R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数
VaR方法作为当前业内比较流行的测量金融风险的方法,具有简洁,明了的特点,而且相对于方差来讲,更多的将投资人的损失作为风险具有更好的合理性。
拓端
2022/12/23
7410
R语言分位数回归、最小二乘回归OLS北京市GDP影响因素可视化分析
对于影响北京市GDP 因素分析常用的方法是最小二乘回归。【1】但最小二乘有自身的缺陷,该方法要求较高,例如许多观测数据很难满足全部假设条件(点击文末“阅读原文”获取完整代码数据)。
拓端
2023/08/31
3100
R语言分位数回归、最小二乘回归OLS北京市GDP影响因素可视化分析
R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列
随着金融市场全球化的发展,金融产品逐渐受到越来越多的关注,而金融产品的风险度量成为投资者最关心的问题。金融风险是指由于经济活动的不确定性、市场环境的变化、决策的失误等因素的影响,导致实际回报与预期回报出现偏离的可能性。
拓端
2023/03/03
3200
R语言使用多元AR-GARCH模型衡量市场风险|附代码数据
董事会感到关切的是,公司已连续第五个季度未能实现盈利预期。股东不高兴。罪魁祸首似乎是商品销售成本的波动。
拓端
2022/11/08
3820
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的任务
拓端
2023/04/22
6530
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
这篇文章讨论了自回归综合移动平均模型 (ARIMA) 和自回归条件异方差模型 (GARCH) 及其在股票市场预测中的应用 ( 点击文末“阅读原文”获取完整代码数据******** )。
拓端
2023/06/02
5550
【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它 。
拓端
2023/01/10
9150
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
这篇文章讨论了自回归综合移动平均模型 (ARIMA) 和自回归条件异方差模型 (GARCH) 及其在股票市场预测中的应用
拓端
2023/01/13
1.8K0
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口|附代码数据
本文应用R软件技术,分别利用logistic模型、ARFMA模型、ARIMA模型、时间序列模型对从2016到2100年的世界人口进行预测
拓端
2023/02/23
8480
推荐阅读
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据|附代码数据
3910
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化
2140
R语言多元(多变量)GARCH :GO-GARCH、BEKK、DCC-GARCH和CCC-GARCH模型和可视化|附代码数据
1.5K0
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化
2830
R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较|附代码数据
7110
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析|附代码数据
1.1K0
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
9900
R语言实现:基于GARCH模型的股市危机预警
5.3K0
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格|附代码数据
1.4K0
R语言DCC-GARCH模型对上证指数、印花税收入时间序列数据联动性预测可视化|附代码数据
3610
R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列|附代码数据
1.3K0
R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数
7410
R语言分位数回归、最小二乘回归OLS北京市GDP影响因素可视化分析
3100
R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列
3200
R语言使用多元AR-GARCH模型衡量市场风险|附代码数据
3820
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
6530
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
5550
【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
9150
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
1.8K0
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口|附代码数据
8480
相关推荐
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据|附代码数据
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 前言
  • 1. C++的关键字(C++98)
  • 2. 命名空间
    • 2.1 作用域
      • 2.1.1 块作用域(局部作用域)
      • 2.1.2 全局作用域(文件作用域)
      • 2.1.3 命名空间作用域(C++特有)
      • 2.1.4 类作用域(C++特有)
    • 2.2 命名空间定义
    • 2.3 命名空间的使用
  • 3. C++的输入和输出
  • 4. 缺省参数
    • 4.1 缺省参数的概念
    • 4.2 缺省参数的分类
  • 5. 函数重载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档