Separate compilation & Namespace

data type由一系列值和对这些值的相关操作组成。abstract data type(ADT)是指使用这类data type的程序猿不需要知道其实现相关细节的data type。如果想用class实现ADT,需要将该type如何被使用和如何被定义的细节分开,达到不需要修改使用ADT的程序就能改变class实现方式的程度。应该遵守的法则有:

1. 将所有的成员变量都设为private

2. 将ADT的基本操作设为public或普通函数或friend function或重载的运算符,将这些函数的声明放在一起形成一个interface file(通常是.h文件)

3. 将函数的具体实现隐藏,放到一个implementation文件中(通常是.cpp)文件,通常需要添加include directive


包括程序主要部分(main函数)的文件通常叫做application file或driver file


C++不允许重复定义一个class,即便是内容完全相同,因此同一个头文件不能被包含多次。解决方法是使用以下形式:

#ifndef DTIME_H
#define DTIME_H
<class definition>
#endif

这样一来只有第一次包含头文件时才会生效。通常将.h文件的名字大写并添加“_H”来进行命名



namespace是一系列名字的定义,如class、variable等

std namespace包含了在标准库文件中定义的名字,如添加#include<iostream>时,会将iostream中的定义(如cin, cout)添加到std namespace中。如果不声明使用std namespace的话则程序就不知道std namespace中的名字

代码总是在某个namespace中的,如果不显式声明,则会被放在global namespace中

可以同时使用多个namespace,多个namespace中也可以使用相同的名字,但如果多个namespace中有相同的名字时,需要使用"::"来指出使用哪个namespace中的内容(叫using declaration),不能直接使用using(叫using directive),否则会产生错误

using namespace1::fun;	// "using declaration"
或
namespace1::fun();

在一个block内的开头使用的"using"只作用于这个block

namespace name_of_namespace
{
	// code
}

一个compilation unit是指一个file和它所#include的file(如interface file)。每一个compilation unit都有一个unnamed namespace,在unnamed namespace中定义的所有名字都只是对该compilation unit可见,所以在compilation unit之外的其他地方可以重复使用。unnamed namespace中定义的任何名字都可以在compilation unit中的任何位置被不被指明属于哪个namespace地使用


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值