C++入门(前言、命名空间、缺省参数、重载)

news2024/11/24 11:57:25

该篇博客主要讲述关于C++发展前言,以及C++祖师爷对C进行改造提升后的新语法进行解释说明,具体内容为:发展历程、命名空间、输入\输出、缺省参数、函数的重载

目录

文章目录

前言

1.什么是C++

2.C++的发展史

3.关于C++的学习

一、关于命名空间

1.含义

2.定义

4.使用

  

二、C++输入&输出

三、缺省参数

1.缺省参数概念

五、函数重载

1.函数重载概念


前言

1.什么是C++

        在之前我们系统学习了C语言,对于C语言来说,它是一种面向过程结果化的语言,适合处理较小规模的程序。当我们面对复杂问题时,需要一种模块化、抽象化形式进行解决,为此,C++就由此而生,它是一种面向多像思想的编程语言。

2.C++的发展史

        对于C++的发展而言,我们可以看如下:

        

阶段内容
C with
classes
类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符
重载等
C++1.0添加虚函数概念,函数和运算符重载,引用、常量等
C++2.0更加完善支持面向对象,新增保护成员、多重继承、对象的初始化、抽象类、静
态成员以及const成员函数
C++3.0进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构的处
C++98C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美
国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)
C++03C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性
C++05C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名
C++0x,即:计划在本世纪第一个10年的某个时间发布
C++11增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循
环、auto关键字、新容器、列表初始化、标准线程库等
C++14对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表
达式,auto的返回值类型推导,二进制字面常量等
C++17在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文
本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等
C++20自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协
程(Coroutines)、范围(Ranges)、概念(Constraints)等重大特性,还有对已有
特性的更新:比如Lambda支持模板、范围for支持初始化等
C++23制定ing

        我们主要关注C++98和C++11两个发行版本,因为现在公司主流还是以这两个版本为标准。

3.关于C++的学习

  1. 多总结知识点,博客不能停,每学一节课,均需要写对应的博客进行记录
  2. 中后期画思维导图进行总结(可用XMind)
  3. 看C++书籍,前期可看《C++程序设计》这本书,用于入门;中期看《Effective C++》《C++ Primer》,必看的两本书;后期可看《STL源码剖析》,注意这本书需要一定基础
  4. 勤刷题

        在C语言中存在许多不足的地方,因此祖师爷对这些地方提出了解决办法,给出了一系列更加利于编程的语法,下面我将开始介绍。

一、关于命名空间

1.含义

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

        列如看以下示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int rand = 1;
int main()
{
	printf("%d\n", rand);
	return 0;
}

      程序报错:

     

        其原因是rand为stdlib.h这个头文件里的一个方法,当我们定义Int rand为变量时,编译时,编译器会进行全局搜索,同时找到了stdlib.h里的rand以及我们定义的rand,这就造成了重定义了,这在c语言中时不允许的。

        除了这种情况外,当我们面临命名冲突或多人进行项目时,也会形成命名冲突问题,简单来说,命名空间就是防止命名冲突。

2.定义

        命名空间关键字为namespace,基本格式为:namespace+命名空间名字+{成员}。命名空间有以下三种情况:

//命名空间里成员可以为变量、函数、类型(结构体)
//1.正常的命名空间
namespace lmx{
	int rand = 1;
	int Add(int i, int j)
	{
		return i + j;
	}
	struct open
	{
		int k;
	};
}
//2.嵌套命名空间
namespace oo {
	int rand = 1;
	namespace kk {

	}
}
//3.同一个工程中,命名空间名相同会自动合并为一个命名空间
//以下命名空间会和第一个命名空间合并为一个。
namespace lmx {
	int j = 1;
}

        注意:一个命名空间就相当于一个作用域,其成员也属于该作用域内,如遇到情况3的合并命名空间中发现有相同的成员,这也会导致命名冲突问题。

4.使用

        符号介绍::: 该符号称为作用限定符。

        当我们需要访问命名空间的成员时,需要用作用限定符:

int main()
{
	printf("%b\n", lmx::rand);
	return 0;
}

        但在现实开发中,这种方式比较麻烦,以下有两种方式可以不加作用限定符:

1.使用using将命名空间中某个成员引入(简称部分展开)

        用于我们需要经常使用该成员,这种方式经常使用。

using lmx::rand;
int main()
{
	printf("%b\n", rand);
	return 0;
}

  

2.使用using namespace 命名空间名称 引入(简称全部展开)

        命名空间内的成员都可以访问,不需要加作用限定符,但这种方式不可取,全部展开后相当于没有命名空间,容易造成命名冲突问题。

using namespace lmx;
int main()
{
	printf("%d\n", rand);
	return 0;
}

二、C++输入&输出

        在C++中对于输入\输出有固定的符号,分别为<<(流插入)和>>(流提取)。

        这里不过多介绍,我们只需知道在c++中输入\输出有以下特性:

        

//iostream头文件是c++中输入输出流文件
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
	int k = 0;
	//输入流-->相当于c语言中printf
	cout << "Hello world!!!" << endl;
	//输出流-->相当于c语言中scanf
	cin >> k;

	//特性:自动识别类型,不需要控制格式
	int j = 2;
	double k = 2.2;
	cin >> j;
	cin >> k;
	cout << "j=" << j << endl;
	cout << "k=" << k << endl;
	return 0;
}

        在日常练习中我们经常将名为std的命名空间全部展开,方便我们编写代码,但在实际开发中不可取,容易造成命名冲突。

三、缺省参数

1.缺省参数概念

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

//全缺省参数(参数全有值)
void Add(int k=1, int j = 1)
{
	printf("%d", k + j);
}

//半缺省参数(部分参数有值)
void sub(int k, int j = 1)
{
	printf("%d", k/j);
}

        注意:1.半缺省参数必须从右往左依次来给出,不能间隔着给,如以下情况:

void Add(int k=1,int a, int j = 1)
{
	printf("%d", k + j+ a);
}

                  2.缺省参数不能在函数声明和定义中同时出现,如以下情况:

 //a.h
 void Func(int a = 10);
 // a.cpp
 void Func(int a = 20)
 {}
 // 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该
用那个缺省值

        对应这种情况,应为函数声明缺省,函数定义不缺省。

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

        3.缺省值必须是常量或者全局变量


五、函数重载

1.函数重载概念

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

        简单来说就是函数的返回类型和函数名必须相同,参数不同。

        具体有以下三种类型:

        

#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)
{
    cont << "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;
}

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

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

相关文章

JMeter测试Web服务

Web服务简介 什么是Web服务 【Web服务】即Web Service。Web服务是一种服务导向架构的技术&#xff0c;通过标准的Web协议提供服务&#xff0c;目的是保证不同平台的应用服务可以互操作。根据W3C的定义&#xff0c;Web服务&#xff08;Web service&#xff09;应当是一个软件系统…

ElasticSearch - 基于 “黑马旅游” 案例,实现搜索框、分页、条件过滤、附近酒店、广告置顶功能

目录 一、黑马旅游案例 1.1、实现 搜索框 和 分页 功能 1.1.1、需求分析 a&#xff09;首先搜索框需求 b&#xff09;分页需求 1.1.2、定义实体类 1.1.2、定义 controller 1.1.3、注入 RestHighLevelClient 1.1.4、实现 IHotelService 接口的 search 方法 1.1.5、功能…

【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)

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

AIGC 绘画Stable Diffusion工具的安装与使用

我们先让ChatGPT来帮我们回答一下,什么是Stable Diffusion Stable Diffusion 是一种基于概率模型的图像生成技术。它通过对图像空间中每个像素的颜色值进行推断,从而生成具有高度真实感和细节的图像。 Stable Diffusion 使用一种称为扩散过程的方法来生成图像。在生成过程中…

Gd-DOTA,CAS:72573-82-1,钆特酸

产品简介&#xff1a;螯合剂是金属原子或离头子与樤含有两个或连两个以上配位原子的配位体作用&#xff0c;生成具有环状结构的络合物&#xff0c;该络合物叫做螯合物。能生成螯合物的这种配体物质叫螯合剂&#xff0c;也成为络合剂。 CAS号&#xff1a;72573-82-1 中文名&am…

基于VR元宇宙技术搭建林业生态模拟仿真教学系统

随着科技的飞速发展&#xff0c;教学方式也正在经历着巨大的变革。林业经济学元宇宙虚拟教学系统作为一种新兴的教学方式&#xff0c;为学生和教师提供了一个全新的、沉浸式的学习和教学环境。 森林管理和监测 元宇宙技术可以用于森林管理和监测。通过无人机、传感器和虚拟现实…

缓冲区溢出漏洞分析

一、实验目的 熟悉软件安全需求分析方法&#xff0c;掌握软件安全分析技术。 二、实验软硬件要求 1、操作系统&#xff1a;windows 7/8/10等 2、开发环境&#xff1a;VS 6.0&#xff08;C&#xff09;、OllyDbg 三、实验预习 《软件安全技术》教材第3章 四、实验内容&#…

中间相遇法(分治类问题非等大分治的平衡做法)

分治&#xff0c;如果分成两半大小不一样&#xff0c;很容易被卡到 O ( n 2 ) O(n^2) O(n2) 在某些题目中&#xff0c;利用中间相遇法&#xff0c;我们可以优化这个过程 其优化的前提是分治的大头在找分界点 复杂度不用证&#xff0c;很好理解吧 这层找地越久&#xff0c;下…

常识判断 --- 科技常识

目录 力与热 光和声 航空成就 垃圾分类 百科知识 血型 二十四节气歌 春雨惊春清谷天 夏满忙夏暑相连 秋处露秋寒霜降 冬雪雪冬小大寒 力与热 光和声 航空成就 垃圾分类 百科知识 血型

机器人中的数值优化|【四】L-BFGS理论推导与延伸

机器人中的数值优化|【四】L-BFGS理论推导与延伸 往期内容回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化&#xff0c;拟牛…

丰田的国际化与转型困境:对中国车企的欧洲策略启示

摘要&#xff1a;欧洲市场的消费者汽车偏好多样,中国车企进军欧洲时,需考虑产品设计和当地法规。回顾历史,丰田汽车通过其独特管理理念,在美国从廉价品牌形象成功转型为高质量、受信赖的全球品牌。但进入电动汽车时代&#xff0c;日本车企因深度共生的传统供应链而转型坎坷。中…

如何使用ES6+特性进行现代前端开发?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用ES6 特性进行现代前端开发1. 使用 let 和 const2. 使用箭头函数3. 使用模板字符串4. 使用解构赋值5. 使用类和模块6. 使用扩展运算符和剩余参数7. 异步编程8. 使用模块打包工具9. 使用现代浏览器 ⭐ 写在最后 ⭐ 专栏简介 前端入门之…

ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯

人工智能AI科技企业OpenAI公司25日宣布&#xff0c;其聊天应用程序ChatGPT如今具备「看、听、说」能力&#xff0c;至少能够理解口语、用合成语音回应并且处理图像&#xff1b;但专家忧心&#xff0c;以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…

1.算法——数据结构学习

算法是解决特定问题求解步骤的描述。 从1加到100的结果 # include <stdio.h> int main(){ int i, sum 0, n 100; // 执行1次for(i 1; i < n; i){ // 执行n 1次sum sum i; // 执行n次} printf("%d", sum); // 执行1次return 0; }高斯求和…

孙哥Spring源码第26集

第26集、AnnotationAwareAspectJAutoProxyCreator源码 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 26.1、postProcessAfterInitialization分析 26.2、wrapIfNecessary分析 26.3、createProxy分析 26.4、getProxy 26.5、BeanPost…

xxl-job分布式调度框架

课程目标 1、 掌握xxl-job部署以及开发的方式 2、 掌握xxl-job特性以及架构设计 3、 掌握xxl-job运行原理 内容定位 适合已经掌握了Quartz的同学 quartz这节课是本节课的基础&#xff0c;这个要求大家一定掌握&#xff0c;因为xxl-job早期就是使用quartz改造的&#xff0…

使用华为eNSP组网试验⑵-通过端口地址进行静态路由

有了网络模拟器可以对很多网络应用场景进行模拟&#xff0c;既方便学习又有利于实际的网络实施。 之前因为没有用过&#xff0c;用过了才知道eNSP的好处。但是与思科模拟器不同&#xff0c;连接是自动连接&#xff0c;不能确定端口&#xff0c;比如使用指定的光纤端口或者RJ45的…

地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广

地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广 地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广

基于微信小程序的民宿短租酒店预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

存储引擎InnoDB与MyISAM

操作引擎 查看存储引擎 show engines;设置系统默认的存储引擎 查看默认的存储引擎 show variables like %storage_engine%;修改默认的存储引擎 set default_storage_engineMyISAM;或者修改my.cnf文件&#xff1a; :::tips default-storage-engineMyISAM #重启服务systemct…