首页 > 编程语言 >C++入门——“命名空间”、“缺省参数”、“函数重载”、“引用”

C++入门——“命名空间”、“缺省参数”、“函数重载”、“引用”

时间:2024-07-11 21:00:17浏览次数:17  
标签:return 函数 int 缺省 C++ 参数 引用 重载

C++在C语言的基础上增加了许多东西,在我看来,它和它的名字一样,是C语言的Plus的Plus版本,而且支持C语言的大部分语法,让码农写起来很是别有一番韵味。在这里向大家介绍C++的一些语法结构。

一、命名空间

        在进行C语言的开发当中,随着代码量的增加,或者工程变得复杂,我们进行变量或者函数的命名的时候,难免会发生重定义的情况发生,为了解决这些问题,C++中引入了命名空间。

       1. 命名空间的定义

                在C++中使用“namespace”关键字来定义命名空间,它的用法和结构体类似,但是在命名空间里面我们可以定义各种各样的变量,包括函数。一般如下:

namespace Test
{
	int testval = 0;
	char testarr[10];
	int testfunc()
	{
		return 1;
	}
}
或者
namespace Test
{
	int testval = 0;
	//char testarr[10];
	int testfunc();//函数声明
}
int Test::testfunc()//这里用“Test::”表示此函数属于Test命名空间的成员函数
{
	return 1;
}

       namespace Test == namespace + 命名空间的名字。不同的命名空间是单独的一个域,不同的域互不干扰。

那么应该如何访问命名空间呢?实例如下:

#include <iostream>

namespace Test
{
	int testval = 0;
	char testarr[10];
	int testfunc()
	{
		return 1;
	}
}

using namespace std;

int main()
{
	cout << Test::testfunc() << "\n" << Test::testval << endl;
	return 0;
}

运行结果如下:

在这里我们需要使用“::”来访问命名空间的内容,其中“::”表示“作用域解析运算符”(类似C语言的 ‘.’),用来访问域的内容。有了命名空间,我们就不用担心工程中出现重定义的问题了。

二、缺省参数

        从名字来看,很多人应该就明白缺省参数的是什么了。“缺省参数”主要是用在函数的形式参数里面,在一些函数里面,我们如果没有特殊需求,都希望传递给函数一个默认的值,缺省参数的存在便极大地方便了开发者在这一方面的需求。

        一般来说,缺省参数是很好理解的,但是需要注意以下几点:

1.一般都是在函数的定义或者声明里面给参数一个默认值。

2.给形参默认值的顺序是从右到左,且不能跳跃设置默认值。

3.给定实参必须是从左到右不能跳跃传递实参(在这里我认为与第2点相呼应)

4.在函数定义和声明分开的时候缺省参数不能在定义和声明同时出现,规定必须在声明中给定缺省值(目的是防止歧义)

以下是缺省参数的定义示例:

#include <iostream>


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

using namespace std;

int main()
{
	cout << Add() << endl;
	return 0;
}

运行结果:

        可以看到我并没有传递参数,在这里函数直接使用了默认值进行运算。当然你还可以像正常函数一样传递参数,在这里就不演示了。

        另外,缺省参数还包括全缺省和半缺省,以上示例是全缺省,半缺省遵循第二点内容,参数不必全部缺省。

三、函数重载

        C++支持在同一个域当中出现同名函数这个叫做含住重载,但是要实现函数重载有以下要求:

1.函数参数不同,函数重载要求函数两个函数的参数不能一样具体就是参数类型的顺序不能一样,例如:

int Add(int x, int y)
{
	return x + y;
}
int Add(int a, int b)
{
	return a + b;
}

        这是不被允许的因为在调用函数的时候,编译器不知道你调用的是哪一个函数,虽然编译器会自动识别参数类型。

因此,函数重载要求两个函数的参数类型和它的顺序不能完全一样。

2.含有全缺省参数的函数重载

例如:

void Func(int x = 1, int y = 2)
{
}
void Func()
{

}

        在这里定义函数的时候是没问题的,但是我们在使用的时候可能会编译错误,当我们在使用的时候,如果不传递任何参数,那么在编译的情况下会报错,在VS环境下如图:

#include <iostream>


void Func(int x = 1, int y = 2)
{
}
void Func()
{

}



int main()
{
	Func();
	return 0;
}

        这是由于没有传递任何参数,编译器不知道调用哪一个函数,从而产生了歧义。如果传递了参数,那么就不会发生报错。

3.返回值的类型不同不能构成函数重载。

四、引用

        引用简言之就是给某个东西取别名,即外号一般定义如下:类型&  引用别名 = 引用对象;

int main()
{
	int a = 0;
	int& b = a;

	return 0;
}

        在引用中,我们可以给变量取别名,也可以给别名取别名,在C++中默认引用是不开辟内存空间的,且对引用别名进行操作就是对引用对象进行操作。示例如下:

int main()
{
	int a = 0;
	int& b = a;
	int& c = b;
	int& d = c;

	d = 10;

	std::cout << d << std::endl;

	return 0;
}

另外,在函数传递参数的时候,引用可以代替指针,这样在函数传参的之后便不用再写“&”了,这样做就很方便。示例如下:

#include <iostream>


void Swap(int& x, int& y)
{
	int temp = x;
	x = y;
	y = temp;
}

int main()
{
	int x = 1, y = 2;
	std::cout << "交换前" << std::endl;
	std::cout << "x是:" << x << std::endl;
	std::cout << "y是:" << y << std::endl;
	Swap(x,y);
	std::cout << "交换后" << std::endl;
	std::cout << "x是:" << x << std::endl;
	std::cout << "y是:" << y << std::endl;
	return 0;
}

运行结果:

        在使用引用的时候还需注意一些问题:

1.引用必须初始化。

2.引用一旦引用了一个实体,便不能再次引用其他实体(我认为与第一点相呼应)。

3.一个变量可以有多个引用。

第一点和第二点是很重要的,很多初学者可能会记不住,会把指针和引用混淆甚至等同。

标签:return,函数,int,缺省,C++,参数,引用,重载
From: https://blog.csdn.net/2301_79972085/article/details/140336375

相关文章

  • C++——类和对象(上)
    文章目录一、类的定义1.类定义格式2.访问限定符3.类域二、实例化1.实例化概念2.对象⼤⼩三、this指针一、类的定义1.类定义格式与定义结构体类似classST{ //成员变量 intval; //成员函数 voidprint() { cout<<val<<endl; }};class为定义类......
  • C++ 入门07:静态成员和常量成员
    往期回顾:C++入门04:数组与字符串-CSDN博客C++入门05:类和对象-CSDN博客C++入门06:类的进阶(构造函数的重载与拷贝构造函数)-CSDN博客 一、前言在前面文章的学习中,我们掌握了类和对象的基础知识以及构造函数的重载与拷贝构造函数。今天,我们将学习类的静态成员和常量成员......
  • C++算法实践07-回文数
    一、题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例 2:输入:x=-121输出:false解释:从左向右读,为-121。从右......
  • C++算法实践06-整数反转
    一、题目:给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例......
  • C++冒泡排序(使用vector动态数组)
    #include<iostream>#include<vector>usingnamespacestd;voidsort(vector<int>&a){  constintsize=a.size();  inttemp;  intflag=1;  while(flag==1)  {  flag=0;  for(inti=0;i<size;++i)  {   if(a[i]>......
  • c++方法
    std::transform方法std::transform是C++标准库算法中的一个非常有用的函数,它定义在头文件中。这个函数用于将给定范围内的每个元素按照指定的操作进行转换,并将转换结果存储在另一个位置(可以是原始范围的另一个容器,或者完全不同的位置)。std::transform提供了一个灵活的......
  • N皇后问题(C++)
    问题描述N皇后问题是一个经典的计算机科学问题,要求在一个N×N的棋盘上放置N个皇后,使得彼此不互相攻击。攻击的定义包括皇后在同一行、同一列或同一对角线上。规则任意两个皇后不能在同一行。任意两个皇后不能在同一列。任意两个皇后不能在同一条斜线上(包括主对角线和副对角......
  • PTA 7-2 数组循环左移--C++
    本题思路:本题可以用数组或者指针来解决问题,本题我们如果我们用数组来解决问题的话,数组循环左移,就相当后面的数组右移过来,如i位置的就相当于i+m的位置的数组,大概这样的思路,就没有问题了#include<iostream>usingnamespacestd;intmain(){intn,m;cin>>n>>m;......
  • C++ 中的 lowbit
    lowbit的定义首先了解lowbit的定义\(lowbit(n)\),为\(n\)的二进制原码中最低的一位\(1\)以及其后面的\(0\)所表示的数举个简单的例子:将\(10\)使用二进制表示为\(1010\)其中最低位的\(1\)为第2位(\(_{10}1_0\),从右往左数)此时\(lowbit(10)\)使用二进制表示为......
  • (免费领取源码)计算机毕业设计项目:宠物店管理系统 19849(开题答辩+程序定制+全套文案 )上
    目 录摘要1绪论1.1背景及意义1.2研究现状1.3springboot框架介绍2 宠物店管理系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据流程3.3.2业务流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结......