C++基础知识一

"本文详细介绍了C++中的命名空间用法,包括普通定义和嵌套定义,以及如何通过using关键字使用命名空间。此外,讲解了C++中的输入输出操作,如cin和cout的使用。接着,讨论了函数缺省参数,分为全缺省参数和半缺省参数,并给出了正确和错误的使用示例。最后,阐述了函数重载的概念,解释了为何C++支持而C不支持,并通过extern"C"展示了如何在C++中使用C风格的函数。"
摘要由CSDN通过智能技术生成

1、命名空间

    在C/C++中存在大量变量,函数和类的名称,难免有相同的命名,导致不同的函数或者变量不同但是名字相同就会导致很多命名冲突。为了避免这些命名冲突或名字污染,因此就引入了namespace关键字。

1.1、namespace定义

    namespace关键字j的具体使用方法如下:(1)普通定义 (2)嵌套定义

//(1)命名空间的普通定义
namespace N1 //N1为命名空间的名称(这可以自己设置)
{
	//在命名空间中,既可以定义变量,也可以定义函数
	int a;
	int Add(int x, int y)
	{
		return x + y;
	}
}

//(2)命名空间的嵌套定义
namespace N1 //定义一个名为N1的命名空间
{
	int a;
	int b;
	namespace N2 //嵌套定义另一个名为N2的命名空间
	{
		int c;
		int d;
	}
}
//嵌套定义时如果嵌套的命名空间名称相同,编译器最后会合并成同一个命名空间中。

1.2、namespace使用

    namespace关键字的使用方法如下:(1)通过using关键词引入全局 (2)在函数提内直接使用

//(1)使用using namespace 命名空间名称引入
using namespace N;//将命名空间N的所有成员引入全局
using namespace N::a;//将命名空间N中的a成员引入全局
//(2)在函数体内直接使用
int main()
{ 
   N::b = 1;
   return 0;
}

2、C++中的输入输出

    C++中的输入输出分别可以通过cin和cout进行实现,具体操作如下:

#include <iostream>
using namespace std;
int main()
{
	int i;
	double d;
	char arr[20];
	//输入数值到变量
	cin >> i;//读取一个整型
	cin >> d;//读取一个浮点型
	cin >> arr;//读取一个字符串
	//打印变量
	cout << i << endl;//打印整型i
	cout << d << endl;//打印浮点型d
	cout << arr << endl;//打印字符串arr
	return 0;
}

3、缺省参数

    在函数定义时,给函数的传参的变量赋予默认值的方式,叫做函数的缺少参数,其可分为全缺省参数和半缺省参数。

3.1、全缺省参数

    如下时全缺省参数的方法:

void Print(int a = 10, int b = 20, int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

3.2、半缺省参数

    如下时半缺省参数的方法:

void Print(int a, int b, int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

    使用半缺省参数时需要注意的3个问题:
    (1)缺省参数必须从最右边开始给,并且不能间隔赋予,比如下面这种:

//错误示例
void Print(int a, int b = 20, int c)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

    (2)缺省参数不能在函数声明和定义中同时出现,可以在定义时给缺省参数,也可以在声名时给缺省参数,但是不能两个同时给缺省参数,比如下面这种操作:

//错误示例
//test.h
void Print(int a, int b, int c = 30);
//test.c
void Print(int a, int b, int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

    (3)缺省值必须时常量或者全局变量

//正确示例
int x = 30;//全局变量
void Print(int a, int b = 20, int c = x)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

3.3、带缺省参数的函数使用方法

    带了缺省参数的需要传参变量,就相当于给了默认值,就可以不给那个变量传参,具体操作如下:

void fun1(int a=4, int b = 1, int c = 10)
{}
void fun2(int a, int b = 1, int c = 10)
{}
int mian()
{
    //全缺省参数可以不传参,也可以传1至3个,根据需要传参的个数而定
    fun1();
    fun1(1);
    fun1(2,3);
    fun1(1,1,1);
    //半缺省参数,必须把没有传入缺省值的形参个数
    fun2(1);
    return 0;
}

4、函数重载

4.1、函数重载定义

    函数重载就是在同一个作用域可以有同名的函数,但是形参列表必须不同(参数个数、参数类型或者参数顺序不同)。具体看如下代码:

#include <iostream>
using namespace std;
int Add(int x, int y)
{
	return x + y;
}

int Add(int x)
{
    return x + y;
}

double Add(double x, double y)
{
	return x + y;
}
int main()
{
	cout << Add(1, 2) << endl;//打印1+2的结果
	cout << Add(1.1, 2.2) << endl;//打印1.1+2.2的结果
	return 0;
}

4.2、为什么C++有函数重载,C没有

    因为C没法区分同名函数。C++可以通过函数名修饰规则区分,C++运行时,会经过4个步骤:
    (1)预编译:将头文件拷贝到当前文件,删除注释,define宏定义在文中对应位置替换
    (2)编译:C语言翻译成汇编代码
    (3)汇编:给每个源文件的符号分配一个地址,然后分别生成一个符号表
    (4)链接:将相关联的文件或符号建立连接
    在第3步汇编的时候C语言中如果出现相同的函数名相同,会出现多个相同符号地址,会报错,而C++在生成符号地址时,形参不同会生成不同的符号地址,因此不会出错。

4.3、extern “C”

    在函数前面加上extern "C"说明此函数需要按C语言规则编译,就不支持重载了,具体操作如下:

extern "C" int Add(int left, int right);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滋巴糯米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值