C++的入门基础

目录

  • C++的简单介绍
  • 命名空间
  • 命名空间的使用
  • C++的输入与输出
  • 缺省参数
  • 函数重载

C++的简单介绍

本贾尼·斯特劳斯特卢普博士在C的基础上增加了面向对象的特性,这时又增加了继承和、类、封装的概念,为后来的面向对象的编程奠定了基础,这被命名为C++

命名空间

1.定义命名空间,需要关键字namespace,namespace后面跟命名空间的名字,后接一对{ },{ }中即为命名空间中的成员,命名空间可以定义变量/函数/类型等。

namespace rzj
{
	//变量
	int a = 2;

	//函数
	int Add(int a, int b)
	{
		return a + b;
	}

	//结构体
	struct listnode
	{
		struct node* c;
		int val;
	}LN;
}

2.namespace 本质上是定义一个域,这个域和全局域各自独立,不同的域可以定义同名的变量。

:: 域作用限定符:下面的用例中有说明

#include<stdio.h>
#include<stdlib.h>

namespace rzj
{
	int rand = 2;
}

int a = 0;

int rand = 2;

int main()
{
	//这个会和stdlib.h下的rand函数产生冲突
	printf("%p\n",rand);
	//rand访问的是全局域中的stdlib.h下的函数指针
	//默认先访问局部的域再访问全局的域

	printf("%d\n",rzj::rand);//2
	// 命名空间的名字::命名空间中的成员名

	int a = 1;
	printf("%d\n", a);//1
	//全局域上和局部域上出现两个相同的变量,就近原则,先访问局部域

	//:: 域作用限定符
	printf("%d\n",::a);//0
	//:: 前面什么都没有,默认访问全局域

	return 0;
}

在这里插入图片描述

在这里插入图片描述

int main()
{
	printf("%d\n", rzj::Add(1, 1));
	//函数的命名空间的访问
	struct rzj::Node p1;
    //结构体的命名空间访问,访问的是名字,不是关键字
	return 0;
}

3.C++域中有全局域、局部域、命名空间域、类域,域影响的是编译是语法查找一个变量/函数/类型出处(声明或定义)的逻辑,有了域隔离,名字冲突就解决了。
局部域和全局域既影响编译时查找,又影响变量的生命周期,命名空间域和类域不影响变量的生命周期,只影响编译时查找。

4.namespace只能定义在全局,当然也可以嵌套定义。

namespace a
{
	namespace b
	{
		int rand = 1;
		int Add(int a, int b)
		{
			return a + b;
		}
	}

	namespace c
	{
		int rand = 2;
		int Add(int a, int b)
		{
			return a * b;
		}
	}
}

int main()
{
	printf("%d\n", a::b::rand);//1
	printf("%d\n", a::c::rand);//2

	return 0;
}

5.多文件中可以定义同名的namespace,他们默认合并在一起,就像同一个namespace一样,是逻辑上的合并,并不是真的合并。

stack.h
namespace rzj
{
   //...
   typedef struct Stack
	{
		STDataType* a;
		int top;
		int capacity;
	}ST;
}

stack.c 
namespace rzj
{
  //...
}

test.c
int main
{
  //调用rzj namespace的
	rzj::ST st2;
	//访问结构体的命名空间
	printf("%d\n", sizeof(st2));
	rzj::STInit(&st2, 4);
	rzj::STPush(&st2, 1);
	rzj::STPush(&st2, 2);
}

6. C++标准库放在一个命名空间std中

命名空间的使用

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

1.using namespace rzj; 把命名空间全部展开
全部展开在自己写的程序下可以用,但是在公司开发中用会产生冲突。

2.指定命名空间中的成员
经常使用这个成员就把它展开来
rzj::a;
每个成员都指定比较麻烦

3.展开命名空间中某个成员
using rzj::b;

公司开发过程中常用的是2 和 3

namespace rzj
{
	int a = 2;
	int b = 1;
}

using namespace rzj;
//展开命名空间
using rzj::b;
//展开命名空间中某个成员

int main()
{
    printf("%d\n",b);
    printf("%d\n",b);
    printf("%d\n",b);  
	printf("%d\n",rzj::a);
	//指定访问

	return 0;
}

C++的输入与输出

1.是标准的输入输出流的库,定义了标准的输入输出流的面向对象。

2.std::cin是istream类的对象,面对窄字符的标准输入

3.std::cout是ostream类的对象,面对窄字符的标准输出

4.<<是流插入运算符, 输出流>>是流提取运算符输入流(C语言中是左移和右移操作符)

5.std::endl(endl == end line)一个字符的结束或者换行
endl是一个函数,流插入输出时相当于1个换行

6.C++的输入输出时可以支持自定义类型,并且可以自动识别变量的类型

#include<iostream>

using namespace std;

int main()
{
	int a, b, c;

	cin >> a >> b >> c;
	//1 2 3
	cout << a << " " << b << " " << c << endl;
	//1 2 3

	return 0;
}

在这里插入图片描述

缺省参数

1.在调用函数时,如果没有传参时,使用参数的默认值,也就是缺省值,传了参数时,使用指定的实参

2.全缺省:在形参中,都给了缺省值
半缺省:在形参中,给了部分缺省值

3.C++规定半缺省给的值,必须从右往左连续缺省,不能间隔和跳跃给缺省值

4.有缺省函数的调用,传参时,实参必须从左往右给,不能间隔,跳跃

5.在声明和定义时,在声明中给缺省值,声明在.h文件中,在定义中不给缺省值,定义在.c文件中,为了防止冲突

缺省参数的意义:在开空间时提前给缺省值,可以防止空间的浪费,提前知道要1000个int大小的空间,就提前给实参1000,传给缺省参数

void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func();
	// 没有传参时,使⽤参数的默认值
	Func(10);
	// 传参时,使⽤指定的实参
	return 0;
}

// 全缺省
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;
}

函数重载

C++允许在同一作用域中出现同名函数,但要求这些同名函数的形参不同,可以是参数个数不同或者类型不同
这是构成函数重载的条件。

函数的返回值不同不构成重载

// 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;
}
// 下⾯两个函数构成重载
// f()但是调⽤时,会报错,存在歧义,编译器不知道调⽤谁
//解决办法是把第一个f1封装到一个命名空间中去,第一个调用时是对命名空间的成员进行调用,第二个是在全局域中调用
//但是这种办法也违背了他们不是函数重载了,因为函数重载是在同一个作用域中才可以实现,所以这个是没有解决办法的

//无参
void f1()
{
cout << "f()" << endl;
}
//不传参时是无参,会存在歧义
void f1(int a = 10)
{
cout << "f(int a)" << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进度条提示-在python程序中使用避免我误以为挂掉了

使用库tqdm 你还可以手写一点&#xff0c;反正只要是输出点什么东西都可以&#xff1b; Demo from chatgpt import time from tqdm import tqdm# 示例函数&#xff0c;模拟长时间运行的任务 def long_running_task():total_steps 100for step in tqdm(range(total_steps), …

用python生成词频云图(python实例二十一)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…

unity-记录位置的坐标系

目录 确定世界坐标系原点的方法 1.创建一个物体 2.在检查器中&#xff0c;将该物体的位置设置为0&#xff0c;0&#xff0c;0 3.观察 父子物体的位置关系 调整坐标轴位置 坐标轴的局部与全局旋转 全局 ​局部 unity使用的是左手坐标系 世界坐标系&#xff1a;是整个游…

从数字化营销与运营视角:看流量效果的数据分析

基于数据打通的“全链路”营销是当下的“时髦”&#xff0c;应用它的前提是什么&#xff1f;深度营销和运营的关键数据如何获得&#xff1f;如何利用数据进行更精准的营销投放&#xff1f;如何利用数据优化投放的效果&#xff1f;如何促进消费者的转化&#xff0c;以及激活留存…

Java语言程序设计——篇二(2)

Java语言基础 运算符与表达式运算符1、算术运算符2、关系运算符3、逻辑运算符&#xff08; &&、||、 !、&、| 、^&#xff09;4、位运算符&#xff08; >>、<<、>>>、&、|、^、~&#xff09;5、赋值运算符6、条件运算符7、字符串运算符8、…

我们公司落地大模型的路径、方法和坑

最近一年&#xff0c;LLM&#xff08;大型语言模型&#xff09;已经成熟到可以投入实际应用中了。预计到 2025 年&#xff0c;AI 领域的投资会飙升到 2000 亿美元。现在&#xff0c;不只是机器学习专家&#xff0c;任何人都能轻松地把 AI 技术融入自己的产品里。 我们整理了一…

AI与智能的差异

在讨论AI&#xff08;人工智能&#xff09;与智能的差异时&#xff0c;可以从以下几个角度来理解&#xff1a; 人工智能&#xff08;AI&#xff09;是指计算机系统执行人类通常需要使用智力才能完成的任务的能力。这包括感知、推理、学习、解决问题等。AI可以通过算法和大数据进…

【C++】开源:格式化库fmt配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍格式化库fmt配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

Aop切面编程(1)

1、aop的使用思想&#xff1a;面向切面的编程&#xff0c;不改变原有代码的基础上&#xff0c;进行拓展&#xff0c;减少代码的冗余&#xff0c;降低耦合性&#xff1b; 2、使用注解进行aop编程&#xff0c;使用自定义注解 2.1导入aop的依赖 <dependency><groupId&…

人话学Python-基础篇-数字计算

一&#xff1a;数字类型 对于最常见的数据类型,数字在Python中分为三类&#xff1a; 整型(int) 表示的是整数类型的所有数字&#xff0c;包括正整数&#xff0c;负整数和0。和C语言不同的是&#xff0c;Python中的int型没有范围的限制&#xff0c;理论上可以从无限小的整数取到…

文献阅读:基于测序的空间转录组方法的系统比较

文献介绍 文献题目&#xff1a; Systematic comparison of sequencing-based spatial transcriptomic methods 研究团队&#xff1a; 田鲁亦&#xff08;广州实验室&#xff09;、刘晓东&#xff08;西湖大学&#xff09; 发表时间&#xff1a; 2024-07-04 发表期刊&#xff…

【YOLO格式的数据标签,目标检测】

标签为 YOLO 格式&#xff0c;每幅图像一个 *.txt 文件&#xff08;如果图像中没有对象&#xff0c;则不需要 *.txt 文件&#xff09;。*.txt 文件规格如下: 每个对象一行 每一行都是 class x_center y_center width height 格式。 边框坐标必须是 归一化的 xywh 格式&#x…

上传图片,base64改为文件流,并转给后端

需求&#xff1a; html代码&#xff1a; <el-dialog v-model"dialogPicVisible" title"新增图片" width"500"><el-form :model"picForm"><el-form-item label"图片名称&#xff1a;" :label-width"10…

开放式耳机哪个品牌比较好?2024最值得推荐的火爆机型!!

在这个快节奏的时代&#xff0c;我们都在寻找那些既能让我们享受音乐&#xff0c;又能保持对外界感知的音频设备。开放式耳机以其独特的设计&#xff0c;满足了这一需求&#xff0c;它们让你在享受音乐的同时&#xff0c;还能听到周围环境的声音&#xff0c;无论是安全出行还是…

【机器学习】作业 Exam1

线性回归预测 唉&#xff0c;研0了&#xff0c;得学机器学习了。当然还是听的吴恩达老师的课&#xff0c;虽然全是英文&#xff0c;但是&#xff0c;怎么评价呢&#xff0c;讲得既专业又通俗易懂&#xff0c;初学者(像我这样的菜鸡)都值得一看&#xff01;&#xff01; 根据人…

更深入了解汽车与航空电子等安全关键型应用的IP核考量因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV高级应用工程师 中国已经连续十多年成为全球第一大汽车产销国&#xff0c;智能化也成为了汽车行业发展的一个重要方向&#xff0c;同时越来越多的制造商正在考虑进入无人机和飞行汽车等低空设备&#xff0c;而所有的这些…

以太网电路相关功能说明

RJ45模块用于PHY芯片之间的互连&#xff0c;如图1所示&#xff0c;RJ45有两种组合形式&#xff0c;一种是分立式&#xff0c;网口变压器和RJ45连接座是分开的&#xff0c;另一种是网口变压器和RJ45集成在一起。 图1 RJ45两种主要形式 接下来以分立式RJ45的百兆网电路做个说明&a…

Xilinx FPGA UltraScale SelectIO 接口逻辑资源

目录 1. 简介 2. Bank Overview 2.1 Diagram 2.2 IOB 2.3 Slice 2.4 Byte Group 2.5 I/O bank 示例 2.6 Pin Definition 2.7 数字控制阻抗(DCI) 2.8 SelectIO 管脚供电电压 2.8.1 VCCO 2.8.2 VREF 2.8.3 VCCAUX 2.8.4 VCCAUX_IO 2.8.5 VCCINT_IO 3. 总结 1. 简介…

Intewell+Codesys高实时运控解决方案

IntewellCodesys高实时运控解决方案 IntewellCodesys方案&#xff0c;基于X86、ARM、MIPS、RISC-V等不同架构的硬件平台&#xff0c;通过Intewell实时操作系统的多种构型形态&#xff0c;包括Intewell-RTOS&#xff0c;Intewell-Win&#xff0c;Intewell-Lin&#xff0c;Intewe…

详解TCP和UDP通信协议

目录 OSI的七层模型的主要功能 tcp是什么 TCP三次握手 为什么需要三次握手&#xff0c;两次握手不行吗 TCP四次挥手 挥手会什么需要四次 什么是TCP粘包问题&#xff1f;发生的原因 原因 解决方案 UDP是什么 TCP和UDP的区别 网络层常见协议 利用socket进行tcp传输代…