初识c++————7.16学习记录

文章目录

  • 前言
  • 一、命名空间
  • 二、流插入和流提取
  • 三、缺省参数
  • 四、函数重载
  • 总结


前言

此系列博客记录我学习c++的过程。

一、命名空间

1.

在学习c语言的过程中我们会遇到命名冲突的问题

下面的代码由于头文件里已经有了rand变量,我们再定义就会出错,但是这种情况并不多见,我们可以避免

#include<stdlib.h>
int rand = 1;

但是如果在公司中,你自己写的名字和同事写的一样,就比较难办,这时候必须有人退让改名字

这时候就需要使用命名空间来解决这个问题

2.

namespace northshaddock
{
	int rand = 1;
}

这个时候就不会有冲突了,即使名字一样

那么如何去找到我们定义在命名空间里的变量呢

一般来说,我们不指定的情况下,编译器会在全局找,这个时候我们就要使用域作用限定符,告诉它到指定的命名空间里去找

//全局去找
printf("%p\n", rand);

// 域作用限定符::
printf("%p\n", northshaddock::rand);

3.

命名空间里可以定义变量、函数、类型

namespace northshaddock
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;

	int Add(int left, int right)
	{
		return left + right;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};
}

然后是使用

printf("%d\n", northshaddock::rand);
printf("%d\n", northshaddock::Add(1, 2));
printf("%d\n", Add(1, 2));

struct bit::Node node;

值得注意的是结构体,域作用限定符在结构体名Node的前面,而不是struct前面

4.展开命名空间

// 全部展开(授权)
using namespace northshaddock;

// 部分展开(授权)
using northshaddock::Add;

展开命名空间,就是放开命名空间的权限,可以去这里面找

默认情况下我们在全局里找,展开后可以进去找

但是这样会危险,假如全局和命名空间里都有,就不知道找哪一个,所以尽量不要全部展开

5.

命名空间可以嵌套

namespace bit
{

	namespace xxx
	{
		int rand = 1;
	}
}

printf("%d\n", northshaddock::xxx::rand);

6.

这一行就是展开c++标准库

//这一行是干什么的?为什么要有这一行

//std是C++标准库的命名空间

  using namespace std;

7.

同时要与头文件的展开区分开

头文件的展开是将头文件中的代码拷贝一份过来

命名空间的展开是开放权限

8.

命名空间会自动合并

一个项目里有好几个.h文件,每个里面都可以定义namespace northshaddock,不会冲突

二、流插入(cin)和流提取(cout)

1.基本使用

    // << 流插入运算符
    cout << "hello world" << endl;

    // 流提取
    int i = 0;
    cin >> i;

2.

这两个运算符都会自动识别类型,其原理是函数重载,后面会讲

	cin >> i >> j;

	cout << i << endl;
	cout << j << endl;

3.

值得一提的是,因为cin控制精度比较麻烦,且c++兼容c语言,所以控制精度仍使用printf

printf("%.1f\n", j);

三、缺省参数

1.

缺省参数就是一个函数在定义的时候先给一个值,在调用函数时如果传参就用传的参数,不传就用这个缺省参数

// 缺省参数
void Func(int a = 1)
{
	cout << a << endl;
}

Func(2);
Func();

2.全缺省

全缺省就是每个变量都给一个缺省值

	//全缺省
void Func(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}

优点是非常灵活

传一个就是传给第一个

3.

半缺省

给缺省值时必须从右往左给,右边的有缺省值,左边的才能给

// 半缺省 -- 必须从右往左,给缺省值
void Func(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

4.

如果函数声明和定义分离,那么声明和定义不能同时给缺省值,声明给定义不给

四、函数重载

1.

函数重载就是有多个函数,但是名字是同一个

如下面的Add函数,在int和double类型的相加中都能用,同时,我们在使用时函数会根据我们传的参数,自动匹配对应的函数

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;
}

C语言不允许同名函数

CPP可以,但是要求构成函数重载

函数名相同,参数不同,参数不同指参数的类型、个数和顺序不同

注意,返回值不同不构成函数重载

2.

要注意一点,参数的顺序不同是指类型顺序不同,而不是参数名字改变位置

如第一个参数类型是int,第二个参数类型是double,那么第一个参数类型

是double,第二个参数是int,这样构成重载

 //这样构成函数重载
void func(int a, double b)
 {

 }

 void func(double a, int b)
 {

 }

//这样是不构成函数重载的
 void func(double a, int b)
 {

 }

 void func(double b, int a)
 {

 }

3.

这样是不构成函数重载,必须在同一个域里

4.

这样构成重载,但是会有调用歧义

总结

这篇文章介绍了c++的一些基础语法知识,是c语言到c++的过渡知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

north-shaddock

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

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

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

打赏作者

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

抵扣说明:

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

余额充值