考研自习(一)

前言

北理工的学姐说,C++是基础,你得会。如果复试线下,有上机的话,这就是王炸。
学习C++,本质是为了考研复试,因此我们重点学习C++的STL,其他一笔带过,带有明确的方向进行学习,效率会高一点。
本篇对C++的学习进行初步总结和规划。

C++简介(超级简短)

C++又叫C Plus Plus 即CPP,由Bjarne Stroustrup 发明。
C++是一种OOP的语言,我之前已经先行学过Java,因此已经能很好的理解面向对象的概念,此处不再加以赘述。C和C++的主要区别在于C是过程式编程语言,不支持类和对象,而C++是过程式和面向对象编程语言的结合;因此C++可以被称为混合语言。
我们在编码时要注意编码规则

文件Program File

头文件Head File

后缀名为 .h

源文件Sourse File

后缀名为 .cpp

第一个程序Hellow Word

#include<iostream>

int main() {
	std::cout << "Hellow World" << std::endl;
	return 0;
}

以前C语言都是使用的printf,这里使用namespace std
其中的std是命名空间,CPP中std为标准的命名空间,冒号为作用域分隔符,接下来详细学习一下这种我之前从没正经研究过的语句。(以前我只知道这玩意能输出一行String)

CPP作用域分隔符

用法:

作用域名::变量(对象、函数)名

表示该变量(对象、函数)属于这个作用域
例如:

class A //声明A类
{	
public:
	void funl ();//声明A类中的funl函数
private:
	int i;
);
vold A::funl ()//定义A类中的fun1函数

{
	//
}


class B //声明B类
{public:
	void funl () ;//B类中也有funl函数
	void fun2 () ;
};
void B: :funl ()//定义B类中的funl函数
{
	//
}

我们可以看出来,两个类的函数重名时,我们通过对函数名指定命名空间的方法,实现了区分。
再如果两个文件中都使用了

int a = 10;

单独编译是不会有问题的,但是连接在一起使用的时候,就会报错;
这里不得不提一下这个关键词

extern int a;

如果我们其中有一个文件的a,使用了extern这个关键字进行修饰,就代表本文件中的变量是外部其他文件中已定义的变量,由此声明,编译时外部文件的变量a的作用域就扩展到了本文件,运行时就不会有报错了。
但是在一个有若干个人完成的大型程序中,不同的人分别定义了类,放在不同的头文件中,在主文件中需要这些类时,就有可能出现在不同的头文件中使用了相同的名字来命名类和函数,这样就会在程序中出现命名冲突。
显然这就需要提出方法来解决这个问题,所以才有了命名空间这个概念。

CPP命名空间

什么是命名空间与为什么使用命名空间

大型程序往往会使用多个独立开发的库,这些库又会定义大量的全局名字,如类、函数和模板等。当应用程序用到多个供应商提供的库时,不可避免地会发生某些名字相互冲突的情况。多个库将名字放置在全局命名空间中将引发命名空间污染(namespace pollution)。

传统上,程序员通过将其定义的全局实体名字设得很长来避免命名空间污染问题,这样的名字中通常包含表示名字所属库的前缀部分。这种解决方案显然不太理想:对于程序员来说,书写和阅读这么长的名字费时费力且过于繁琐。

命名空间(namespace)为防止名字冲突提供了更加可控的机制。命名空间分割了全局命名空间,其中每个命名空间是一个作用域。通过在某个命名空间中定义库的名字,库的作者以及用户可以避免全局名字固有的限制。
所谓命名空间,实际上就是一个程序设计者命名的内存空间,设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。

namespace namespace1{
	int a = 10;
	int f();
}

这样,其中的a和f()仍然是全局变量,只是隐藏在命名空间中。若要在程序中使用他们,必须要加上命名空间名和作用域分辨符“::”,如namespace1::a,这被称为命名空间限定。

如何使用命名空间

取别名

namespace namespace1{
	int a = 10;
	int f();
}
namespace ns1=namespace1; 

使用using在命名空间申明
例如我们一开始的hellowWorld,又可以写作

#include<iostream>
using namespace std;

int main() {
	cout << "Hellow World" << endl;
	return 0;
}

又比如

#include<iostream>
namespace ns1 { int a = 10; }
namespace ns2 { int a = 9; }
using ns1::a;
using namespace std;
int main() {
	cout << a << endl;
	return 0;
}

最终就会输出10
还有一种特殊的,无名字的命名空间
例如文件A中有

namespace
{
	void f()
	{
		cout <<"hello World"<<endl;
	}
}

由于没有名字,其他文件是无法引用到的,只有A自己可以使用
最后再说我们最开始HellowWorld里的标准命名空间std(standard)
标准c++库里的所有标识符都是在一个名为std的命名空间里定义的,或者说标准头文件(如iosteram)中函数,类,对象和类模板都是在命名空间std中定义的。
这样,在程序中要使用c++标准库时,就需要使用std作为限定。

流插入操作符“<<”

之后是

cout <<"hello World"<<endl;

里的“<<”,它被称为流插入操作符。意思是将下面的东西插入到前面的那个对象里面进去。

在这段代码中,cout是作为std的一个标准输出对象,所以

cout <<"hello World"

的意思是将"hello World"插入到输出流中
同时这个操作符在同一行中是可以连续使用的,比如我们这个语句

cout <<"hello World"<<endl;

就是连续把"hello World"和endl插入cout

endl这个对象代表换行

以上就是对这行C语言和Java语言中都没接触到相关语法的代码的学习与理解。

总结(日记)

今天找了找C++该学什么,该怎么学,开始了最基础的学习。
惯例敲出了第一个CPP文件代码HellowWorld,也学习了一些CPP独有的语法知识。
今天还复习了高数有关函数的基础知识,书暂时还没寄到,因此还没有正式系统的开始复习。
去医院检查后,医生说手即便再动手术,也不见得能够完全康复,神经的恢复是以年为单位的,因此不建议我再次手术松解,因为功能已经恢复90%以上了,因此这个寒假我决定不做手术了,直接开始考研复习生活。

规划

明天快速过一遍CPP课程中与Java和C共通的语法,在接下来的几天里进一步的学习CPP的位运算符和STL,等到考研参考书寄到家以后开始每日背单词与高数复习刷题。
关于剧本最后的决定是,写一个推理剧本,《一别四年》的构思更适合毕业剧,还早,有待琢磨。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值