独立编译和命名空间

1.ADT

确保类的接口和类的实现分开。遵循以下三个原则:

1、使所有成员变量都称为类的私有成员。

2、是ADT的每一项基本操作都成为类的一个公共成员函数、一个友元函数、一个普通函数或者一个重载的操作符。将类定义与函数/操作符声明合到一起。这个组以及所有相关注释统称为ADT的接口。在类或函数/操作符声明的配套注释中,完整解说如何使用每个函数或者操作符。

3、确保使用ADT的程序员无法访问到基本操作的具体的实现。实现有函数定义以及重载操作符的定义。

在C++中,为了确保遵循这些规则,最好的办法就是将ADT的接口与实现存储到独立的文件中。包含接口的文件称为接口文件,包含实现的文件称为实现文件。

包含main程序的文件通常称为应用程序文件或驱动程序文件。

4.使用#ifndef 

#ifndef  DTIME_H
#define DTIME_H
<一个类的定义>
#endif

4.命名空间

一个程序使用不同的程序员编写的不同的类和函数时,可能出现两个程序员为两样不同的东西使用同一个名称的情况。命名空间就是为了解决这一问题而设计的。命名空间是名称定义的一个集合。

using预编译指令的作用域规则:

using指令的作用域是它所在的那个块(更准确的说,是从这个using预编译指令开始,一直到当前块结束)。如果using指令在所有块的外部,它的作用域就是从using指令开始,一直到整个文件结束。
5.创建命名空间:

要将代码放到一个命名空间中,需采取一下形式来定义一个命名空间分组:

namespace  Name_space_Name
{
    Some_Code
}

将上述命名空间分组到自己的代码中,就相当于将Some_Code中的定义的名称放到命名空间Name_Space_Name中。为了使用这些名称,需要使用一下using指令:

using  namespace Name_Space_Name;
//演示命名空间
#include <iostream>
using namespace std;
namespace ns1
{
  void greeting();
}
namespace ns2
{
  void greeting();
}
void big_greeting();
int main()
{
  { using namespace ns1;
     greeting();
   }
  {using namespace ns2;
    greeting();
   }
   big_greeting();
   return 0;
}
namespace ns1
{void greeting()
   {
    cout<<"HELLO FROM NAMESPACE ns1\n";
    }
 }
namespace ns2
{ void greeting
    {
        cout<<"GREETING FROM NAMESPACE ns2\n";
     }
}
void big_greeting()
{cout<<"A BIG GLOBAL HELLO\n";
}
限定名称:
假定你遇到这样一种情况:有两个命名空间,分别是ns1和ns2,你希望使用ns1中定义的fun1以及ns2中定义的fun2.但问题在于,在ns1和ns2这两个命名空间中,都定义了一个名为my_function的函数。在这种情况下,一下语句是不合适的,因为他们提供有冲突的my_function定义:
using namespace ns1;
using namespace ns2;
所以,需要采取一种方式,指出自己准备使用的命名空间ns1中的fun1以及命名空间ns2中的fun2,但不准备使用命名空间ns1和ns2中的其他任何东西。一下语句称为using声明,它们能解决这个问题:
using  ns1::fun1;
using  ns2::fun2;



6.命名空间微妙之处:

“using 声明”和using预编译指令(比如using namespace sdt)有两个区别:

1、using声明只让命名空间中的一个名称进入可用状态,而using预编译指令使那个命名空间中的所有名称都进入可用状态。

2、using声明在你的代码中引入一个名称,不允许这个名称再有其他用途。但是,using预编译指令只是隐式引入命名空间的名称。只要代码中不实际使用冲突的名称,就不会出问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值