C++基础学习之在多函数程序中使用using编译指令及总结
2.3.5 在多函数程序中使用using编译指令
在程序2.5中,两个函数中都包含下面一条using编译指令:
using namespace std;
这是因为每个函数都使用了cout,因此需要能够访问位于名称空间std中的cout定义。
在程序2.5中,可以采用另一种方法让两个函数都能够访问名称空间std,即将编译指令放在函数的外面,其位于两个函数的前面:
//ourfunc.cpp--repositioning the using directive #include<iostream> uisng namespace std; void simon(int); int main() { simon(3); cout<<"pick an integer:"; int count; cin>>count; simon(count); cout<<"done!"<<endl; return 0; } void simon(int n) { cout<<"simon says touch your toes "<<n<<" times."<<endl; }
当前通行的理念是,只让需要访问名称空间std的函数访问它是更好的选择,例如,在程序2.6中,只有main()函数使用了cout,因此没有必要让函数stonetolb()能够访问名称空间std。因此编译指令using被放在函数main()中,使得只有该函数能够访问名称空间std;
总之,让程序能够访问名称空间std的方法有很多种,下面是其中的4种。
将using namespace std;放在函数定义之前,让文件中所有的函数都能够使用名称空间std中所有的元素。
将using namespace std;放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素。
在特定的函数中使用类似using std::cout;这样的编译指令,而不是using namespace std;,让该函数能够使用指定的元素,如cout。
完全不使用编译指令using,而在需要使用名称空间std中的元素时,使用前缀std::,如下所示:
std::cout<<”i’m using cout and endl from the std namespace”<<std::endl;
命名约定
c++程序员给函数、类和变量命名时,可以有很多种选择。程序员对风格的观点五花八门,这些看法有时就像公共上的圣战。就函数名称而言,程序员有一下选择:
myfunction( )
myfunction( )
myfunction( )
my_function( )
my_funct( )
选择取决于开发团体、使用的技术或库以及程序员个人的品味和喜好。因此凡是符合第三章将介绍的c++规则的风格都是正确的,都可以根据个人的判断而使用。
撇开语言是否允许不谈,个人的命名风格也是值得注意的——它有助于保持一致性和精确性。精确、让人一目了然的个人命名约定是良好的软件工程的标志,它是整个生涯中都会起到很好的作用。
2.5总结
c++程序有一个或多个被称为函数的模块组成。程序从main()函数(全部小写)开始执行,因此该函数必不可少。函数有函数头和函数体组成。函数头指出函数的返回值(如果有的话)的类型和函数期望通过参数传递给它的信息的类型。函数体有一系列位于花括号({})中的c++语言组成。
有多种类型的c++语句,包括下述6种。
n 声明语句:定义函数中使用的变量的名称和类型
n 赋值语句:使用赋值运算符(=)给变量赋值
n 消息语句:将消息发送给对象,激发某种行为。
n 函数调用:执行函数。被调用的函数执行完毕后,程序返回到函数调用语句后面的语句
n 函数原型:声明函数的返回类型、函数接受的参数数量和类型
n 返回语句:将一个值从被调用的函数那里返回到调用函数中
类是用户定义的数据类型规范,它详细描述了如何表示信息以及可对数据执行的操作。对象是根据类的规范创建的实体,就像简单变量是根据数据类型描述创建的实体一样。
c++提供了两个用于处理输入和输出的预定义对象(cin和cout),它们是istream和ostream类的实例,这两个类是在iostream文件中定义的。为ostream类定义的插入运算符(<<)使得将数据插入到输出流成为可能;为istream类定义的抽取运算符(>>)能够从输入流中抽取信息。cin和cout都是智能对象,能够根据程序上下文自动将信息从一种形式转换为另一种形式。
c++可以使用大量的c库函数。要使用库函数,应当包含提供该函数原型的头文件。