2015年(29)
分类: C/C++
2015-04-16 22:12:30
C++融合了3中不同的编程方式:C语言代表的过程性语言、C++在C语言的基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。
面向对象程序设计(OOP:Object Oriented Programming): 是一种,同时也是一种程序开发的方法。对象指的是的实例。它将作为的基本单元,将程序和其中,以提高软件的重用性、灵活性和扩展性。
泛型编程(generic programming):是C++支持的一种编程模式,它与OOP的目标相同,即使重用代码和数据抽象通用概念的技术更简单。
区别:OOP强调编程的数据方面,而泛型编程提供了执行常见任务(如对数据排序或合并链表)的工具。术语泛型(generic)指的是创建独立于类型的代码。
我的理解:OOP是强调如何使数据和算法自然的融合在一起,提高编程的效率。而泛型主要解决对于同一个算法,如何实现算法的类型无关性,提高编码效率,代码利用率。
命名空间支持是一项c++特性,即C语言不支持命名空间。
命名空间的作用:命名空间让不同厂商能够将其产品封装在一个叫做命名空间的单元中,这样就可以用命名空间的名称来指出想使用哪个厂商的产品。
C++标准库被定义在命名空间std中。
Using使用的方法: using namespace 指定的空间名称;
using编译指令使得指定的命名空间中的所有名称都可用,这是一种偷懒的做法。在大型项目中存在潜在的问题,更好的方法是,只声明所需的名称可用,如:
using std::cout;
using std::cin;
using std::endl;
另外,对于同一个命名空间,它们之间是相互可见的,例如:
namespace A
{
int a_x1 = 10;
}
namespace A
{
int a_x2 = a_x1;
}
namespace B
{
int b_x1 = A::a_x1;
}
如上,如果在同为A的空间中,a_x2调用a_x1不需要使用A::a_x1这种修饰。
另外还有一点,就是匿名命名空间的使用。
我们为了使一些全局变量只能在本文件中使用,通常会使用static说明一个静态全集变量,那么其他文件即使对这些变量进行extern的声明,也不能使用。
那还有没有其他方法完成这项工作呢?
有,就是使用匿名全局变量。匿名全局变量的使用如下所示:
namespace
{
int g_value = 20;
}
在本文件中,可以使用直接使用g_value,而不需要用“空间名称::g_value”的方式,当然,你也可以使用“::g_value”对该变量进行调用,因为本来就是无名的,所以::前面没有东西。
如果其他文件引用,必须知道命名空间名,既然没有,ok,那就只能说抱歉,不能使用。