一、如何学习C++?
1.推荐官网网站:https://en.cppreference.com/
2.选择一款优秀的IDE开发环境:
Windows: VS2017或2019 / Qt
Linux: VScode / Qt
C++之父:Bjarne Stroustrup,图灵社区对C++之父的采访
C之父:丹尼斯·里奇
csdn的帖子
二、面向对象程序设计 VS 面向结构程序设计(面试题和考试题
1.优缺点
面向对象的优点:复用性好!扩展性好!维护性好!
面向结构的缺点:复用性差!扩展性差!维护性差!
面向结构:过程分析,自顶向下,逐步细化
面向对象:对象,分装成实体。实体就是动作的支配者。
2.衡量语言的标准:
扩展性:添加新的功能,不能改之前的代码;
维护性:当出现问题,能够准确定位代码;
复用性:功能代码复用;
3.应用场景:
面向对象:解决复杂宏观的系统任务
面向结构:具体任务
4.面向对象的三大特点:
封装:解决代码的维护性
继承:解决代码的复用性
多态:解决代码的扩展性
三、C++对C的加强—命名空间
1.为什么要引入命名空间的概念—解决命名冲突
#include<iostream>
using namespace std;//命名空间
int main()
{
cout<<"hello world!" << endl;
return 0;
}
std是命名空间名字。std是standard的缩写,意思是标准命名空间。
namespace是C++中的关键字,用来定义一个命名空间,语法格式为
namespace name
{
//变量、函数、类等
}
命名冲突:全局变量、函数(重名时)
命名冲突产生的场景:多人协同开发!!!
C语言时如何解决多个文件导致的命名冲突?
答:static关键字
static关键字的作用:
1.修饰局部变量:延长局部变量的生命周期(程序执行结束之后再释放)
2.修饰全局变量:被修饰的全局变量,只能在本文件使用,不能再其他文件中使用!
3.修饰函数:被修饰的函数,只能在本文件被访问,不能在其他文件被访问
C++如何解决命名冲突?命名空间:(本质的实现:给每个变量和函数添加static)
2.怎么使用命名空间
a.使用变量、函数时要指明它们所在的命名空间。以fp变量为例。
Li::fp =fopen("one.txt","r");//使用小李定义的变量fp
Han::fp =fopen("two.txt","rb+");//使用小韩定义的变量fp
“::”时一个新符号,称为域解析操作符,在C++中用来指明要使用的命名空间。
b.除了直接使用域解析操作符,还可以采用using声明,例如:
using Li::fp;
fp = fopen("one.txt","r");//使用小李定义的变量fp
Han::fp = fopen("two.txt","rb+");//使用小韩定义的变量fp
在代码的开头用using声明了Li::fp,它的意思是,using声明以后的程序中如果出现了未指明命名空间的fp,就是用Li::fp,但是若要使用小韩定义的fp,仍然需要使用Han::fp。
c.using声明不仅可以针对命名空间的一个变量,也可以用于声明整个命名空间。
d.默认情况下可以直接使用默认命名空间中(全局空间)的所有标识符。
命名空间的使用:方式1:名字::成员 方式2:using namespace 名字
区别:单一 vs 全部
其他:嵌套定义
3.命名空间注意事项
a.源文件不能访问其他源文件的命名空间
b.如果命名空间重名,相同成员报错,不同成员合并
4.C++标准库和std命名空间
std::标准库命名空间;防止与c语言的命名发生冲突
命名空间尽量定义在.h文件
尽量不使用using,容易引发命名冲突