【C++】认识C++(一)

 

前言 

📚作者简介:爱编程的小马,是一名大厂后端c++程序员。

📚本文收录于c++系列,本专栏主要是分享我所了解的c++知识,带领大家慢慢从了解c++到认识c++,持续更新!

📚本文主要内容:带大家先认识一下c++,其中包含命名空间,输入输出,标准库,以及缺省参数

目录

1.认识c++

1.1 命名空间

1.1.1 命名空间的定义 

1.1.2 命名空间的访问

2.1 c++的输入和输出

2.1.1 输入

2.2.2 输出

 2.2.3 c++的标准库

3.1 缺省参数

3.1.1 缺省参数的概念 

 3.1.2 缺省参数的分类

3.1.3 缺省参数的应用

总结


1.认识c++

1.1 命名空间

给大家讲解命名空间之前,先引入一个C语言的例子

#include<stdio.h>
#include<stdlib.h>

int rand = 10;

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

这段代码,报错了,报了一个rand重定义,因为rand在头文件是函数,预处理就会将头文件展开,导致和整型变量重复了。下面来看看c++是如何处理的: 

在c/c++中,变量、函数、结构体(类)都是大量存在的,那么这些名称就会存在很多冲突,你用了这个名称,其他人就必须要改变自己的名称,那么在c++里有引入命名空间,其作用是用来对标识符的名称进行本地化,以避免命名冲突。namespace关键字就是在这个基础上产生的。

注意: 命名空间中可以定义变量,可以定义函数,可以定义结构体

1.1.1 命名空间的定义 

namespace boke
{
	int m = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct student
	{
		int age;
		char name[20];
		long number;
	};
}

1.1.2 命名空间的访问

那么命名空间中的成员如何访问呢?有三种方法

●加命名空间名称及作用域限定符(::)

#include<iostream>
using namespace std;
namespace boke
{
	int m = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct student
	{
		int age;
		char name[20];
		long number;
	};
}

int main()
{
	cout << boke::m << endl;
	return 0;
}

●局部展开命名空间,使用using关键字

#include<iostream>
using namespace std;
namespace boke
{
	int m = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct student
	{
		int age;
		char name[20];
		long number;
	};
}
using boke::m;
int main()
{
	
	cout << m << endl;
	return 0;
}

 ●全局展开命名空间,using namespace+命名空间名称

#include<iostream>
#include<string.h>
using namespace std;
namespace boke
{
	int m = 20;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct student
	{
		int age;
		char name[20];
		long number;
	};
}
using namespace boke;
int main()
{
	int a = 5;
	int b = 6;
	cout << m << endl;
	cout << Add(a, b) << endl;
	student s1;
	s1.age = 10;
	strcpy(s1.name, "lisi");
	s1.number = 194056789;
	cout << s1.age << endl;
	cout << s1.name << endl;
	cout << s1.number << endl;
	return 0;
}

注意: 全局展开命名空间很危险,可能还是会导致命名冲突,建议还是加作用域限定符进行访问

2.1 c++的输入和输出

2.1.1 输入

在c++中,使用输入输出时必须包含头文件iostream,以及命名空间std。

cin(标准输入对象)是c++中全局的流对象,是istream的对象,">>"是流提取运算符

c++中不用手动控制格式,编译器会自动识别。


#include<iostream>
using namespace std;


int main()
{
	int m = 0;
	double d = 0;
	cin >> m >> d;
	cout << m << endl;
	cout << d << endl;
	return 0;
}

例如输入100 ,99.9 键盘上用空格隔开两个数即可 

 

2.2.2 输出

在c++中,使用输入输出时必须包含头文件iostream,以及命名空间std。

cout(标准输入对象)是c++中全局的流对象,是ostream的对象,"<<"是流插入运算符

c++中不用手动控制格式,编译器会自动识别。

 2.2.3 c++的标准库

推荐大家使用以下方法来包含标准库的头文件

#include<iostream>
using namespace std;

3.1 缺省参数

3.1.1 缺省参数的概念 

缺省参数是定义或声明函数时,为函数的参数设置的一个缺省值。在调用函数时,如果没有设定该参数,则使用缺省参数,否则使用设定的参数。 

#include<iostream>
using namespace std;

void fun1(int a = 10)
{
	a++;
	cout << a << endl;
}

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

 这个会输出什么结果?上面降到了,如果没有给值,那就使用缺省值,会输出11;

如果给了一个值,就会用这个值而不会使用缺省值。

 3.1.2 缺省参数的分类

全缺省参数

#include<iostream>
using namespace std;

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

int main()
{
	func();
	func(15);
	func(15,16);
	func(15, 16, 17);
	return 0;
}

全缺省可以传一个,传两个,传三个,也可以不传。

半缺省参数 

注意:半缺省不是指缺省一半,而是一部分是缺省参数,一部分是函数参数

#include<iostream>
using namespace std;

void func(int a , int b , int c = 30)
{
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
	cout << endl;
}
int main()
{
	func(1,2);
	func(1,2,3);
	return 0;
}

注意:1、半缺省必须从右到左连续给出,不能间隔给 

           2、缺省参数不能同时在定义和声明中给出

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

           4、C语言不支持缺省参数 

3.1.3 缺省参数的应用

随便举一个例子,用顺序表给出一个例子,比如说,我们在学习数据结构的时候,总会说,一开始开不开空间,开多大的空间?下面来看缺省参数的好处

#include<iostream>
using namespace std;

struct SeqList
{
	int* a;
	int size;
	int capacity;
	void SeqListInit(SeqList* s , int capacity = 4)
	{
		int* tmp = (int*)malloc(sizeof(int) * capacity);
		if (tmp == nullptr)
		{
			perror("malloc failed");
			return;
		}
		s->a = tmp;
		s->capacity = capacity;
		s->size = 0;
	}
	void checkcapacity(SeqList* s)
	{
		if (s->size == s->capacity)
		{
			cout << "扩容" << s->capacity << endl;
			int* tmp = (int*)realloc(s->a, sizeof(int) * capacity * 2);
			if (tmp == nullptr)
			{
				perror("malloc failed");
				return;
			}
			s->a = tmp;
			s->capacity *= 2;
		}
	}
	void SeqListInsert(SeqList* s, int x)
	{
		checkcapacity(s);
		s->a[s->size++] = x;
	}
};

int main()
{
	SeqList s1;
	s1.SeqListInit(&s1,101);
	for (int i = 0; i <= 100; i++)
	{
		s1.SeqListInsert(&s1, i);
	}
	for (int i = 0; i <= 100; i++)
	{
		cout<<s1.a[i]<<" ";
	}
	return 0;
}

这个情况就很好用,就是呢我知道要开多大空间,存储多少内存,那我就定义capacity,如果我不知道,那就默认开4个空间,十分好用。 

总结

本文从c++的认识切入,带大家了解了命名空间,输入输出,标准库,以及缺省参数;明天给大家更新函数重载,引用等主要知识,今天只是为c++开个小头。

 如果这份博客对大家有帮助,希望各位给小马一个大大的点赞鼓励一下,如果喜欢,请收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给小马的意见,欢迎评论区留言

相关推荐

  1. C++语言学习()—— 认识C++语言

    2024-07-20 04:52:08       31 阅读
  2. 学懂C语言系列():认识C语言

    2024-07-20 04:52:08       16 阅读
  3. C++基本认识

    2024-07-20 04:52:08       36 阅读
  4. C++ 如何去认识模板

    2024-07-20 04:52:08       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 04:52:08       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 04:52:08       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 04:52:08       45 阅读
  4. Python语言-面向对象

    2024-07-20 04:52:08       55 阅读

热门阅读

  1. 【WPF开发】上位机开发-串口收发

    2024-07-20 04:52:08       18 阅读
  2. Eureka: 微服务架构中的服务发现与注册实践

    2024-07-20 04:52:08       18 阅读
  3. egret 白鹭的编译太慢了 自己写了一个

    2024-07-20 04:52:08       19 阅读
  4. git泄露

    2024-07-20 04:52:08       19 阅读
  5. 交叉编译aarch64的Qt5.12.2,附带Mysql插件编译

    2024-07-20 04:52:08       17 阅读
  6. 3507软件IIC,IO输入输出函数

    2024-07-20 04:52:08       15 阅读
  7. Elasticsearch扩容与缩容集群

    2024-07-20 04:52:08       18 阅读
  8. 三、模型转换和压缩扩写

    2024-07-20 04:52:08       15 阅读