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慎用,适用小型项目/日常练习)文章来源:https://www.toymoban.com/news/detail-826743.html
不管哪种方式,其本质是控制域,全局域和局部域
举例:文章来源地址https://www.toymoban.com/news/detail-826743.html
#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;
}
到了这里,关于【C++开篇 -- 入门语法篇】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!