C++初阶 -1- C++入门

news2024/11/20 19:32:37

文章目录

  • 0.什么是C++
  • 1.C++关键字
  • 2.命名空间
    • 导入
    • 什么是命名空间
    • 命名空间的使用
  • 3.C++ 输入&输出
  • 4.缺省参数
    • 什么是缺省参数
    • 缺省参数的应用场景
  • 5.函数重载

0.什么是C++

C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。


1.C++关键字

asmdoifreturntrycontinue
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

2.命名空间

导入

  • 全局变量与局部变量冲突时,优先哪个?
    • 局部变量 → 因为查找的顺序是:先在局部 ⇢ 再去全局
  • [ (域) ]:: 域作用限定符 ⇨ 在左边这个(域)里面查找变量,为空就是在全局找
  • 为了解决变量名冲突的问题,命名空间应运而生

什么是命名空间

namespace (name){ 
   ……(在这里面定义变量)}
  • namespace 关键字
  • (name) :: →在名为 (name) 的域内查找变量(name中不要加空格)
    在这里插入图片描述

正确使用示例:

namespace fantasy
{
	int a = 13;
	int l = 7;
	struct MyStructRB
	{
		int* array;
		int size;
	}RB;
}


int main()
{
	int sum = fantasy::a + fantasy::l;

	fantasy::RB.size = 0;
	fantasy::RB.array = nullptr;

	return 0;
}

命名空间的使用

  • 命名空间的 name 重名?
    在这里插入图片描述

    • 同样 name 的命名空间会被合并
  • 命名空间可以嵌套

namespace fantasy
{
	int a = 13;
	int l = 7;
	namespace RoundBottle
	{
		struct MyStructRB
		{
			int* array;
			int size;
		}RB;
	}
}

int main()
{
	fantasy::RoundBottle::RB.size = 0;
	fantasy::RoundBottle::RB.array = nullptr;
	return 0;
}
  • 命名空间的三种使用方式

    1.指定命名空间访问
    2.全局展开(日常练习中可以,项目中一般不会用全局展开)
    using namespace (name);
    3.部分展开
    using (name)::(命名空间的成员);

1.指定命名空间访问
namespace fantasy
{
	struct MyStructRB
	{
		int* array;
		int size;
	}RB;

}

int main()
{
	fantasy::RB.size = 0;
	fantasy::RB.array = nullptr;
	return 0;
}
2.全局展开(日常练习中可以,项目中一般不会用全局展开)
namespace fantasy
{
	struct MyStructRB
	{
		int* array;
		int size;
	}RB;

}

//全局展开
using namespace fantasy;

int main()
{
	RB.size = 0;
	RB.array = nullptr;
	return 0;
}
3.部分展开
namespace fantasy
{
	struct MyStructRB
	{
		int* array;
		int size;
	}RB;

}

//部分展开
using fantasy::RB;

int main()
{
	RB.size = 0;
	RB.array = nullptr;
	return 0;
}

3.C++ 输入&输出

  • std:C++标准库
std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
  • cout:输出👉 cout << 输出内容 << endl;
  • cin:输入
  • endl 👉 换行符
  • << 流插入运算符; >> 是流提取运算符。
#include <iostream>
using namespace std;

int main()
{
	int num = 0;
	// 可以自动识别变量的类型
	cin >> num;
	cout << num << endl;
	return 0;
}

在这里插入图片描述

4.缺省参数

什么是缺省参数

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

示例:

  • 缺省参数分为全缺省部分缺省
//全缺省
int Add(int x = 1, int y = 2)
{
	return x + y;
}

//部分缺省
int Sum(int x, int y, int z = 3)
{
	return x + y + z;
}
  • 缺省参数不能跳跃,必须从左往右连续使用
    • 错误示例:
×错误的:
//部分缺省
int Sum(int x = 1, int y, int z = 3)
{
	return x + y + z;
}
//or
int Sum(int x = 1, int y, int z)
{
	return x + y + z;
}

👉默认实参不在形参列表的结尾
在这里插入图片描述
💭如果这个需要调用Sum函数,且只给 int y 传参 👉 Sum(2),这个数据2到底是传给x、y、·z中的哪一个就不得而知
在这里插入图片描述

  • 缺省参数不能在声明和定义中同时出现!👉推荐在声明的时候给缺省参数
//函数声明:
int Add(int x = 1, int y = 2);

int main()
{
	//函数调用:
	cout << Add() << endl;
	return 0;
}

//函数定义:
int Add(int x = 1, int y = 2)
{
	return x + y;
}

在这里插入图片描述

缺省参数的应用场景

(举例:栈的初始化)

C:

// 初始化栈 
void StackInit(Stack* ps)
{
	STDataType* tmp = (STDataType*)malloc(4 * sizeof(STDataType));
	if (!tmp)
	{
		perror("malloc fail");
		exit(-1);
	}
	ps->_a = tmp;
	ps->_top = 0;
	ps->_capacity = 4;
}

CPP:

// 初始化栈 
void StackInit(Stack* ps, int initsize = 4)
{
	int* tmp = (int*)malloc(initsize * sizeof(int));
	if (!tmp)
	{
		perror("malloc fail");
		exit(-1);
	}
	ps->_a = tmp;
	ps->_top = 0;
	ps->_capacity = initsize;
}
  • 知道栈中最多存100个数据:

    • StackInit(&stack, 100);
  • 不知道栈中最多存多少数据:

    • StackInit(&stack);

5.函数重载

C语言不允许同名函数名的存在 →(为了解决这个问题) C++函数重载

函数重载 → 在同一个命名空间,且函数名相同,参数不同
1.类型不同
2.个数不同
3.(类型的)顺序不同

1.参数类型不同:
void func(int x, int y)
{
	cout << x + y << endl;
}

void func(char x, char y)
{
	cout << x << y << endl;
}

int main()
{
	func(1, 2);
	func('a', 'b');

	return 0;
}

output:
3
ab

2.参数个数不同:
void func(int x)
{
	cout << x << endl;
}

void func(int x, int y)
{
	cout << x + y << endl;
}

int main()
{
	func(1, 2);
	func(3);
	return 0;
}

output:
3
3

3.(参数的类型)顺序不同 
void func(char x, int y)
{
	cout << x << y << endl;
}

void func(int x, char y)
{
	cout << x << y << endl;
}

int main()
{
	func('a', 13);
	func(7, 'l');
	return 0;
}

output:
a13
7l

  • 仅返回值不同,能构成函数重载吗?

    • 不能
  • 函数重载是如何实现的?

    1. C++对函数名进行了修饰,不同平台下的修饰规格不同
    2. 自动识别函数参数的类型 (会不会使运行速度变慢?👉不会,可能影响编译速度,但不影响运行速度)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ESP32和blinker的红外小夜灯控制

一. 系统设计及框图&#xff1a; 本设计可以实现通过手机APP使用蓝牙或WIFI远程控制红外设备&#xff0c;也可以通过离线语音模块语音控制红外设备。可以控制市面上常见的NEC格式的红外设备, 这里是控制小夜灯&#xff0c;其它红外设备在控制原理上是相通的。本设计可用作课程…

二、UVM Sequencer和Sequence

了解sequencer与driver之间传递sequence item的握手过程&#xff0c;也掌握了sequence与item之间的关系。接下来对sequence挂载到sequencer的常用方法总结&#xff0c;可以通过这些方法和宏的介绍&#xff0c;了解到它们不同的使用场景面对多个sequence如果需要同时挂到sequenc…

机器学习:基于AdaBoost算法对信用卡精准营销建立模型(附案例实战)

机器学习&#xff1a;基于AdaBoosts算法对信用卡精准营销建立模型 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&a…

OPNET Modeler 例程——M/M/1 队列建模

文章目录一、例程概述二、模型构建三、仿真配置及结果1.M/M/1 队列2.M/M/n 队列总结一、例程概述 本例程是使用节点编辑器建立一个 M/M/1 队列模型&#xff0c;同时对仿真收集到的统计数据进行数学分析。M/M/1 队列由先进先出的缓冲区组成&#xff0c;数据包的到达服从指数(泊…

Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)

目录 前言 一、动态SQL---if标签 1. 持久层添加用户通用查询方法 2. 映射文件添加相关标签 3. 测试类新建测试方法 4. 运行结果 二、动态SQL---where标签 1. 映射文件添加相关标签 2. 测试类新建测试方法 3. 运行结果 三、动态SQL---set标签 1. 持久层添加用户更新方…

DNS域名协议(IP段获取DNS服务器、反解析获取主机域名、查找子域名记录、查看子域名记录)

IP段获取DNS服务器 nmap 192.168.190.0/24 -p53 反解析获取主机域名 host 192.168.137.149 192.168.137.149 查找子域名记录 dig 192.168.137.149 -t axfr MAILMAN.com 查看子域名记录 dig 192.168.137.149 -t axfr _msdcs.MAILMAN.com

神经微分方程Resnet变体实现内存下降和保持精度

本文内容&#xff1a; 1、学习神经微分方程的笔记&#xff0c;主要锻炼自己学习新知识的能力和看有很多数学原理的论文能力&#xff1b; 2、神经微分方程可以用于时序数据建模、动力学建模等&#xff0c;但是本文专注于分类问题-resnet变体<比较容易理解>&#xff1b; …

StringBuffer,StringBuilder,

StringBuffer 结构示意图&#xff0c; Serializable,可以实现网络传输 package com.jshedu.StringBuffer_;/*** author Mr.jia* version 1.0*/public class StringBuffer01 {public static void main(String[] args) {/*1.在父类中AbstractStringBuilder 属性char[] value不是f…

博弈论在电动车和电网系统中分布式模型预测控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Android中使用有趣的指示器和过渡自定义 Compose Pager

Android使用有趣的指示器和过渡自定义 Compose Pager google最近在compose中新增了Pager控件&#xff0c;HorizontalPager和VerticalPager。 页面之间的转换 该文档涵盖了访问页面从“对齐”位置滚动到多远的基础知识。我们可以使用这些信息来创建页面之间的过渡效果。 例…

DC:4通关详解

信息收集 漏洞发现 访问web 尝试弱口令 账号admin 可以执行ls du df看看发的包,我们是否有机会执行任意命令 发现post传参radio处可以任意命令执行 弹个shell先 提权 从vps上下载LinEnum.sh来枚举脆弱性 优化shell 现在shell就有自动补齐了 在/home/jim下发现密码字典…

cube-studio AI平台 提供开源模型示例列表(3月份)

文章目录背景AI应用商店背景 cube是腾讯音乐开源的一站式云原生机器学习平台&#xff0c;目前主要包含 1、数据管理&#xff1a;特征存储、在线和离线特征&#xff1b;数据集管理、结构数据和媒体数据、数据标签平台 2、开发&#xff1a;notebook(vscode/jupyter)&#xff1b…

【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;狠狠的刷题&#xff01;&#xff01;&#xff01;&#x1f308; 若有帮助&#xff0c;还请…

【Ubuntu 22.04 上配置 FTP 服务器步骤】

Ubuntu 22.04 上配置 FTP 服务器步骤 1.安装 vsftpd 软件包&#xff1a; sudo apt-get update sudo apt-get install vsftpd 2.查看vsftpd版本和状态&#xff0c;确认vsftpd安装成功和正常启动 2.修改 vsftpd 配置文件&#xff1a; sudo nano /etc/vsftpd.conf 3.在配置文件中…

Ethercat概念学习

Ethercat技术调研 背景 最近我们要基于Ethercat技术进行开发&#xff0c;首先需要了解其基本原理&#xff0c;github上看到了有相关实现&#xff0c;一起来看看吧。 Ethercat技术 速度更快 传输速率:2*100 Mbaud 全双工 高速性、高实时性 微秒级 像火车一样有帧头、帧尾&a…

如何对农田温室气体进行有效模拟?

农业是甲烷&#xff08;CH4&#xff09;、氧化亚氮&#xff08;N2O&#xff09;和二氧化碳&#xff08;CO2&#xff09;等温室气体的主要排放源&#xff0c;占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主&#xff0c;如何对农田温室气体进行有效…

计算机组成原理(四)输入/输出系统

一、概述 1.1前言 I/O设备是计算机组成原理之硬件最后的一部分。输入输出系统是计算机系统当中种类最多、功能最多、结构最复杂、构成也最多样的系统。在现代计算机系统当中&#xff0c;外部设备的总成本可以占到计算机总成本的80%以上。可以说&#xff0c;没有这些丰富多彩的外…

「Vue面试题」Vue项目中有封装过axios吗?主要是封装哪方面的?

一、axios是什么 axios 是一个轻量的 HTTP客户端 基于 XMLHttpRequest 服务来执行 HTTP 请求&#xff0c;支持丰富的配置&#xff0c;支持 Promise&#xff0c;支持浏览器端和 Node.js 端。自Vue2.0起&#xff0c;尤大宣布取消对 vue-resource 的官方推荐&#xff0c;转而推荐…

(原创)Flutter基础入门:实现各种Shape效果

前言 上一篇博客讲了Flutter的装饰器Decoration Flutter基础入门&#xff1a;装饰器Decoration 装饰器就可以帮我们实现各种Shape效果 但上篇文章并没有讲如何实现具体的Shape效果 那么具体要怎么做呢&#xff1f;这篇文章就主要讲这块 在Fluter中实现Shape效果时&#xff0c;…

Servlet(一)

目录 1.什么是Servlet 2.servlet程序 2.1 创建项目 2.2 引入依赖 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 验证程序 3.更简单的部署方法 3.1 安装 3.2配置 4.访问出错怎么办 4.1 404 4.2 405 4.3 500 4.4 空白页面 4.5 无法访问此页面 5.se…