初识C++(一)

目录

一、什么是C++

二、关键字:

三、命名空间 :

1. C语言存在的问题:

2. namespace关键字:

3. 注意点:

4.使用命名空间分为三种:

四、输入输出:

五、缺省函数:

        1. 什么是缺省函数:

        2.注意点: 

        3. 这个省略函数的用途: 


一、什么是C++

        C++是一种面向对象的高级程序设计语言。

        C++是在C语音的基础上,添加了一些祖师爷在写代码的时候的一些困惑。把他自己的想法在C语言的基础上实现。因此C++也可以兼容C语言。

二、关键字:

        c++ 一共63个关键字

        对比c语言的32个更多了一些,在之后的学习中我会挑一部分来讲

三、命名空间 :

1. C语言存在的问题:

        在预处理的时候,会把#include<stdlib.h>展开,里面也有rand,这个是作用在全局域中,然后你又在全局域中定义了一个rand变量。这就是名字冲突,在C语言中没有很好的解决方法,只能通过改名字。

        但是在实际的项目中,由不同小组的人完成,刚好他们都用到了同一个变量名,C语言的话就只能他们两个干一架,决定名字的使用权。

在C++中就引入了一个命名空间

2. namespace关键字:

namespace ABC
{
    ...
}

        像这样子就把你写的代码放到了一个名字叫ABC的域中(建起了一座围墙,如果你不开一条路,你就不能访问里面的东西)

        在正常情况下,编译会先去局部空间中查找有没有这个变量,然后再去全局中找。如果没有找到,也没有using namespace的话,不会到命名空间中找。(就相当于建起了一座保护墙)


3. 注意点:

       1)  namespace的命名空间:

              只影响使用,不影响生命周期。因为namespace的命名空间也是全局域的,只是编译器不去查找,不要自我认为它不是全局域的。

       2)可以嵌套使用namespace关键字

namespace ABC
{
   namespace DEF
    {
        int a;
    }
}

        这样子使用的时候是ABC::DEF::a=10;

       3)标准库的命名空间是std   也就是说你要使用标准库的cout等,

你需要包含#include<iostream>  然后在用的时候std::cout<<i<<std::endl;

        4)多个文件中定义的域的名字相同,会把他们合并起来。

         讲了什么是命名空间之后,我再讲命名空间怎么使用,其实上面我已经提到了一些。在这里我再详细说一下。

         讲的时候会涉及到::符号,::域作用限定符,会去前面提到的域中查找,如果前面为空,就去全局去找,不会在其他域中查找。

std::cout<<i<<std::endl;//endl相当于换行,和printf("\n");一样的效果
::n=10;//前面没有提到是什么域,就会去全局域中查找

4.使用命名空间分为三种:

1.全局展开:

#include<iostream>
using namespace std;//全局展开
int main()
{
    int i;
    cin>>i;
    cout<<i<<endl;
}
    

        辛辛苦苦把墙建起来,用了全局展开,就相当于把墙给拆掉了。

        在练习的代码中,可以这么干,因为就几十行的代码,大不了我们把命名改了。

        但是在项目的时候,一定不能这么写。那是十几万行的代码。很容易和其他组的人写重名。

2.局部展开:

#include<iostream>
using std::endl;
using std::cout; 
int main()
{
    int i=10;
    std::cin>>i;
    cout<<i<<endl;
}

        展开一部分比较常用的,如果不展开,每一次都写,太繁琐了。

3.不展开:

        在每一次要用的时候就  域::变量; 

四、输入输出:

       <<   符号是流插入运算符

        比我们c语言方便的一点是 可以自动识别类型。

        我们这里cin是一个标准输入流,cout是标准输出流。 

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
int main()
{
	int i = 0;
	std::cin >> i;
	double* arr = (double*)malloc(sizeof(double) * i);
	if (arr == NULL)
	{
		perror("malloc error");
		exit(-1);
	}
	for (int j = 0; j < i; j++)
	{
		std::cin >> arr[j];
	}
	for (int j = 0; j < i; j++)
	{
		std::cout << arr[j]<<std::endl;
	}
 return 0;
}

        可以看出,cin可以自动识别类型。你可以觉得不怎么样。但是到后面结构体那些的时候就会很方便了。

五、缺省函数:

        1. 什么是缺省函数:

         函数传参的时候,如果不想传,也可以不传,会有一个默认参数值。

void fun(int a = 0)
{
	std::cout << a << std::endl;
}
int main()
{
	fun(1);
	fun();
	return 0;
}

        如果传了参数,int a=0就不起作用。

        这个0就是舔狗界的王。当人家有男票的时候,你有多远就走多远。当人家没有男票的时候,你就屁颠屁颠的靠近。 

        2.注意点: 

        不能跳跃,省略参数必须从右往左连续缺省。

        因为实参是从左往右传的。

//不能跳跃
//省略参数必须从右往左连续缺省       如func(int a=10;int b;int c=30) -->错误的,要从右往左缺省
//                                  func(int a;int b=20;int c=30) -->对的
//因为实参是从左往右传给形参的
void func(int a = 10, int b = 20, int c = 30)
{
	std::cout << a << std::endl;
	std::cout << b << std::endl;
	std::cout << c << std::endl;
}
int main()
{
	func(1);
	func(1, 2);
	func(1, 2, 3);
	return 0;
}

        3. 这个省略函数的用途: 

        当你初始化栈的时候,不可以写死,一开始就开4个大小的空间。那如果需要100万的空间,那你还需要不断的扩容。

        你可能知道最大的空间是多少,那你就直接传参。

        有可能你也不知道传多大。那就什么都不传。

        这个情况就很适合用缺省函数了。

//用途在初始化的时候,很灵活,只要你知道你想开多少的空间,就按你传的数据来,如果你不知道想要传多少,就用缺省产生
typedef struct stack
{
	int* arr;
	int top;
	int capacity;
}stack;
void stackInit(stack* st, int a = 4)
{
	st->arr = (int*)malloc(sizeof(int*) * a);
	if (st->arr == NULL)
	{
		perror("malloc error");
		exit(-1);
	}
	st->top = 0;
	st->capacity = a;
}
int main()
{
    stack st1; 
    stack st2;
    stackInit(&st1,100);//在你知道最多需要100个空间的时候,你直接传进去,可以省略多次的扩容
    stackInit(&st2);//不传参,就一开始开辟4个空间
    return 0;
}

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

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

相关文章

PTA L2-026 小字辈

本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c;我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#xff0c;…

java网络原理(三)----三次握手四次挥手

三次握手 三次握手是建立连接的过程&#xff0c;四次挥手是断开连接的过程&#xff0c;三次握手发生在socket.accept()之前。 客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手&#xff0c;这个过程建立完了后&#xff0c;连接就好了。 A和B…

2024不起眼的“致富”野路子,不想打工了,做做这些暴利创业项目。2024个人创业做什么项目好;最适合白手起家的创业项目

经济大环境差&#xff0c;并不代表就没有机会。相反&#xff0c;主流经济不好正是另一些人所看重的千载难逢的机会。就像股票市场一样&#xff0c;有人靠做多赚钱&#xff0c;有人靠做空赚钱。下面我们就来分析一下哪些行业会在这个时候崛起。 首先二手行业会迅速崛起&#xff…

东芝复印机3115 日志清除

以管理员登录&#xff0c;默认的用户名是admin&#xff0c;密码123456. 点日志中的导出日志&#xff0c;逐个清除日志。

陪诊APP开发价格的价格是多少

随着社会的发展&#xff0c;人们的生活节奏越来越快&#xff0c;对于医疗服务的需求也在不断增加。特别是在老年人口逐渐增多的今天&#xff0c;陪诊服务成为越来越多人关注的焦点。那么&#xff0c;陪诊APP的开发价格需要多少钱呢&#xff1f;本文将从以下几个方面进行详细分析…

Android 地图SDK 去除缩放

问题 Android 地图SDK 去除缩放 详细问题 笔者进行Android 项目开发&#xff0c;接入高德地图SDK。但是默认在地图右下角有高德地图缩放按钮&#xff0c;现需要去除该按钮 预期效果 解决方案 mMapView.getMap().getUiSettings().setZoomControlsEnabled(false);代码含义解…

视频素材库哪里最好

哈哈&#xff0c;大家好&#xff01;今天我要给大家带来的是视频素材库哪里最好的搞笑推荐&#xff0c;让你的视频创作更加轻松有趣&#xff01; 视频素材库哪里最好&#xff1f;首先来说说蛙学网这个网站简直就是中国风视频素材的宝库&#xff01;如果你想让你的视频有点中国味…

QT常见数据类型和类的使用

qDebug //基本打印 qDebug() << "Hello" << 123;//类似printf的打印int num 20;char str[20]"hello world";qDebug("如果只写在括号里&#xff0c;是不需要QDebug头文件的 %d %s", num, str);//打印十六进制数组 #define HexPrint…

紧急声明!致歉

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 致歉 首先&#xff0c;给大家说声抱歉&#xff01; 最近mxxWechatBot的服务器一直不稳定&#xff0c;有很多原因&#xff0c; 比如说服务器到期了&#xff0c;讲服务器临时切换到家里&am…

【Review+预测】测试架构演进的曲折之路

文章目录 前言 一、“原始”阶段 二、“小打小闹”阶段 三、“小米加步枪”阶段 四、“摩托化部队”阶段 五、“骑兵连”阶段 六、“海军陆战队”阶段 七、“社区型组织”阶段 前言 近期公司的测试团队需要重新组织安排&#xff0c;本着谦虚谨慎的态度&#xff0c;我从…

基于python+vue 的一加剧场管理系统的设计与实现flask-django-nodejs-php

二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一需求设…

测试开发工程师(QA)职业到底需要干些什么?part1:移动端QA

概述 移动端QA测试开发工作主要涉及对移动应用程序进行质量保证和测试的开发工作。以下是移动端QA测试开发人员的主要职责和工作内容&#xff1a; 测试计划和策略制定&#xff1a;参与制定移动应用程序的测试计划和策略&#xff0c;确定测试范围、测试目标和测试方法。考虑到…

牛客小白月赛89(A~C)

小白赛怎么这么难打&#xff0c;是什么小白&#xff0c;我的世界小白吗。 A. 伊甸之花 给你一个数组 a&#xff0c;问你是否找出一个 不等于 a 的数组 b&#xff0c;满足 其中数值都要在 [1,m] 的范围内 直接在 a 数组上修改&#xff0c;可以发现如果改了 a[1],a[2]&#xff…

Oh My Bug || PHPmyAdmin导入csv文件时,502报错

解决&#xff1a; 在宝塔面板文件配置中加入一下代码 location / { proxy_pass http://localhost:888; } location /backend-api { rewrite ^/backend-api(.*)$ $1 break; proxy_pass http://你的ip地址; }

DP:斐波那契数列模型

创作不易&#xff0c;感谢三连支持 &#xff01; 斐波那契数列用于一维探索的单峰函数之中&#xff0c;用于求解最优值的方法。其主要优势为&#xff0c;在第一次迭代的时候求解两个函数值&#xff0c;之后每次迭代只需求解一次 。 一、第N个泰波那契数 . - 力扣&#xff08;…

简介:iframe 沙箱+WebComponent 容器

前言 HTML 内联框架元素 (<iframe>) 表示嵌套的browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 每个嵌入的浏览上下文&#xff08;embedded browsing context&#xff09;都有自己的会话历史记录 (session history)和DOM 树。包含嵌入内容的浏览上下文称…

【史上最全面arduino esp32教程】SPI层次结构SPI协议与SPI控制器结构

文章目录 前言一、SPI 程序层次1.1 硬件原理图1.2 硬件框图1.3 软件层次 二、SPI协议2.1 硬件连线2.2 如何访问SPI设备2.3 SPI 框图 总结 前言 欢迎阅读本篇文章&#xff0c;将为您介绍Arduino ESP32上的SPI通信协议。SPI&#xff08;Serial Peripheral Interface&#xff09;…

Matlab快捷键与函数

注释&#xff1a;注释对于代码的重要性我们就不做过多的解释了。不做注释的代码不是好代码。选中要注释的语句&#xff0c;按快捷键CtrlR,或者在命令行窗口上面的注释地方可以进行注释。当然也可以直接在语句前面“%”就可以&#xff08;注意&#xff1a;一定要用英文符号&…

Matlab与高光谱遥感:环境监测的新时代

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

Windows10安装SSH

Linux运维工具-ywtool 目录 1. 打开设置2. 应用3.管理可选功能4.添加功能5.安装OpenSSH服务器6.测试是否安装成功 1. 打开设置 windows桌面按下"win l"键调出"设置"2. 应用 点击"应用"3.管理可选功能 点击"管理可选功能"4.添加功能…
最新文章