【C++开篇 -- 入门语法篇】

C++知识开篇

前言:
首先,C++兼容C,C++在C语言范畴上增添了一些优化,它支持多种编程范式,包括过程式编程、面向对象编程和泛型编程。C++是C语言的扩展,添加了许多新特性,如类、模板、异常处理等。接下来,随着这篇文章推开C++知识的大门吧。
/知识点汇总/

1、介绍C++的背景以及与C语言的区别

1.1、什么是C++?

C++是一种通用的、支持多重编程范式的计算机程序设计语言,它综合了高级语言和低级语言的特点。它既有高级语言的易用性,可以编写出简洁、易读的代码,同时也有低级语言的灵活性,可以直接操作内存和硬件。C++擅长面向对象程序设计,它支持类和对象的概念,可以实现封装、继承和多态等面向对象开发的四大特性。此外,C++还提供了丰富的标准库,包括STL(标准模板库)、iostream、fstream等,为程序员提供了许多常用的数据结构和算法。

1.2、C++的背景

C++诞生于1983年,由Bjarne Stroustrup在贝尔实验室开发。其初衷是创建一种语言,既具有C语言的系统级特性,又能支持面向对象编程。随着语言的成熟和扩展,C++变得越来越复杂,但其核心仍然保持了与C语言的高度兼容性。C++广泛应用于各种领域,包括操作系统、编译器、硬件驱动、游戏开发、网络编程等。

2、C++与C语言的区别

1.面向对象编程:C++支持面向对象编程,包括类、对象、继承、多态等概念。而C语言是一种过程式编程语言,不支持面向对象编程。
2.类型安全:C++是一种强类型语言,具有严格的类型检查。相比之下,C语言的类型检查较为宽松,容易导致类型错误。
3.内存管理:C++引入了自动内存管理特性,如new和delete操作符,以及智能指针等。这些特性有助于减少内存泄漏和悬挂指针等问题。C语言需要程序员手动管理内存,包括分配和释放内存。
4.异常处理:C++支持异常处理机制,可以使用try、catch和throw关键字来处理运行时错误。而C语言没有内置的异常处理机制,通常使用错误码或返回值来表示错误。
5.模板和泛型编程:C++引入了模板和泛型编程的概念,允许程序员编写与数据类型无关的代码。这使得代码更加通用和可重用。C语言不支持模板和泛型编程。
6.标准库:C++具有丰富的标准库,包括STL(标准模板库)、iostream、fstream等,提供了许多常用的数据结构和算法。而C语言的标准库相对较小,需要程序员自行实现许多常用功能。

小结:
总之,C++相对于C语言具有更多的特性和优势,使得编程更加高效、安全和可维护。然而,由于C++的复杂性,对于初学者来说,学习曲线可能较为陡峭。因此,在学习C++之前,建议先掌握C语言的基础知识。

3、C++优化命名空间

C++解决了C语言中,重复命名的问题。即,解决程序员命名和库中的命名重复。

3.1、C中的问题

起初C语言中,全局变量和局部变量命名一样时,默认执行局部变量。

#include <stdio.h>
//#include <stdlib.h>
int rand = 10;
int main()
{
	int rand = 11;
	printf("hello world\n");
	printf("rand1 = %d\n", rand);//11
	printf("rand2 = %d\n", rand);//11
	return 0;
}

C++方法一:C++现在引出 :: 域操作符
::域作用限定符

#include <stdio.h>
//#include <stdlib.h>
int rand = 10;
int main()
{
	int rand = 11;
	printf("hello world\n");
	printf("rand1 = %d\n", rand);//11
	printf("rand2 = %d\n", ::rand);//10
	//::左边不指定时,默认是全局域
	return 0;
}

C++方法二:命名空间
引出namespace关键字 — 划分独立的域
补充编译器搜索原则:

1.未指定时,先当前局部域,后全局域
2.指定时,通过::直接指定域搜索

#include <stdio.h>
namespace bit1
{
	int rand = 0;
}
namespace bit2
{
	int rand = 1;
}
int main()
{
	int rand = 11;
	printf("hello world\n");
	printf("rand1 = %d\n", bit1::rand);//0 ---指定了bit1域搜索
	printf("rand2 = %d\n", bit2::rand);//1 ---指定了bit2域搜索
	printf("rand2 = %d\n", rand);//11
	return 0;
}

另外,不仅仅是变量,还可以是函数、结构体等命名文体,都可以解决命名冲突的问题,而且namespace指定的域名可以相同,但是默认执行时会合并其内容,不过域名再相同就对解决重命名就无意义了。

#include <stdio.h>
namespace bit1
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
namespace bit2
{
	int rand = 1;
}
int main()
{
	int rand = 11;
	printf("hello world\n");
	printf("rand1 = %d\n", bit1::rand);//0 ---指定了bit1域搜索
	printf("rand2 = %d\n", bit2::rand);//1 ---指定了bit2域搜索
	printf("rand2 = %d\n", rand);//11
	//函数
	printf("Add():%d\n", bit1::Add(1, 2));
	//结构体
	//错误位置bit1::struct Node phead;
	struct bit1::Node phead;//bit::是指定在结构体的变量名前
	return 0;
}

3.2、命名空间的应用

通常结合using使用,作用是展开空间域

#include <stdio.h>

namespace bit1
{
	int rand = 0;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}

using namespace bit1;//展开bit1域,bit1内容可在工程下其它文件中。

int main()
{
	struct bit1::Node phead;
	return 0;
}
#include <iostream>
using namespace std;//std是所有C++库的命名空间
int main()
{
	//std::cout << "hello world" << std::endl;
	cout << "Hello World" << endl;
	return 0;
}

小结
命名空间关键字:namespace 常用于解决命名冲突和展开

C++中,名称(name)可以是符号常量、变量、宏、函数、结构体、枚举、类和对象等等。而在大型工程中,难免会有重名的现象;
命名空间namespace,就是C++引入的一种解决名称冲突的机制

4、总结

C语言中

需要通过人为操作符号的名称,来限制符号的作用域和链接属性来完解决名称冲突的。
比如:
1.同一个C文件中的全局变量 / 函数加一个统一的前缀进行区分,
2.通过作用域的掩蔽规则来进行覆盖(在大文件中如果出错很难发现) C文件中的全局变量和函数都是extern链接属性;
3. 可以用static将无需跨文件访问的全局变量和函数限制在内链接属性中

C++

namespace有三种使用方法:
1.使用时对符号附带命名空间的名称
2.使用前对该符号进行声明,后面直接使用该符号
3.使用前声明整个命名空间,后面直接使用该命名空间中的任何符号

三种方式:

1.指定访问:std::cout
2.展开常用访问: 常用的展开:using std::cout; using std::endl;
3.展开访问: using namespace(std慎用,适用小型项目/日常练习)

不管哪种方式,其本质是控制域,全局域和局部域
举例:

#include <iostream>
using std::cout;
using std::endl;
namespace bit
{
	namespace zs
	{
		void Push()
		{
			cout << "zs" << endl;
		}
	}
	namespace ls
	{
		void Push()
		{
			cout << "ls" << endl;
		}
	}
}
int main()
{
	int m = 0;
	std::cin >> m;

	for (int i = 0; i < m; i++)
	{
		cout << "hello world" << endl;
	}
	bit::zs::Push();
	bit::ls::Push();
	return 0;
}
  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值