VC++6.0之标准using namespace std
最近1直在看由电子工业大学出版的吕老师编写的c《++语言程序设计(第3版)》,其中的程序代码书写我其实不知道有1定的缺点,我1直沉醉在他的书中,居然没有再去看看其他的版本,原来新的C++已明确提出不提倡用的1些规定这本书还在用,也是我在最近的做题堕入了1定的窘境,很愁闷,后来在标准的习题中了解了1些编程代码书写规范。今天就好好学习1下标准的代码书写。 先来看看旧版的C++编程风格(就是目前我学的这本书) <font size="4"><span style="color:#ff0000;">#include <iostream.h>//旧版的C++头文件包括命令
</span>class MyClass //定义的1个类
{
public://类中的公有成员
MyClass(int i)//定义的带1个参数的构造函数
{ value = i; cout << "Constructor called." << endl; }//在类内的构造函数的函数体,调用1次将会输出1次
int Max(int x,int y) { return x>y ? x : y; }//定义的重载函数是类的成员函数
int Max(int x,int y,int z) //类内定义的重载函数
{
if (x > y)
return x>z ? x : z;
else
return y>z ? y : z;
}
int GetValue() const { return value; }//定义的1般的成员函数
~MyClass() { cout << "Destructor called." << endl; }//类内定义的析构函数,调用1次将输出1次
private://类中的私有成员,只有成员函数才可以访问
int value;
};
<span style=""><span style="background-color: rgb(255,255,255);"><span style="color:#ff0000;">void main()//返回值类型为空的主函数</span>
</span></span>{
MyClass obj(10);//定义的1个带参数的对象,将使用构造函数对其进行初始化
cout<<"The value is "<<obj.GetValue()<< endl;//通过对象援用1般的成员函数
cout << "Max number is " << obj.Max(10,20) << endl;//通过对象援用重载函数
}</font>
这类的编程风格也是我1直在使用的,原来存在局限性,也是将要被替换的,虽然说在VC++6.0中仍然可以运行,但是在其他的编程软件中就不再适用了,例如VS2010等等。 再来看看新的C++的编程的书写: <span style="color:#ff0000;">#include <iostream>//新版的C++头文件包括命令</span>
<span style="color:#ff0000;">using namespace std;</span>
class MyClass //定义的1个类
{
public://类中的公有成员
MyClass(int i)//定义的带1个参数的构造函数
{ value = i; cout << "Constructor called." << endl; }//在类内的构造函数的函数体,调用1次将会输出1次
int Max(int x,int z) //类内定义的重载函数
{
if (x > y)
return x>z ? x : z;
else
return y>z ? y : z;
}
int GetValue() const { return value; }//定义的1般的成员函数
~MyClass() { cout << "Destructor called." << endl; }//类内定义的析构函数,调用1次将输出1次
private://类中的私有成员,只有成员函数才可以访问
int value;
};
<span style="color:#ff0000;">int main()//返回值类型为整型的主函数
</span>{
MyClass obj(10);//定义的1个带参数的对象,将使用构造函数对其进行初始化
cout<<"The value is "<<obj.GetValue()<< endl;//通过对象援用1般的成员函数
cout << "Max number is " << obj.Max(10,20) << endl;//通过对象援用重载函数
<span style="color:#ff0000;">return 0;
</span>}
原来这才是与时俱进的新C++编程代码的规范书写,那就来看看二者的区分: 1.头文件包括命令的不同,旧版的为#include <iostream.h>当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是初期的c++实现。而新C++的#include <iostream>当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。 #include <iostream.h> 2.主函数的返回值类型的不同,旧版的为void main(),而新C++为int main(),严格的还要在主函数的函数体最后1行加上return 0;要不然会出现正告错,虽然不影响程序的运行,但是按良好的编程风格来讲加上是最好的。 二者的区分还有: 1.旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C头文件则没有(以保持对C的兼容性)。旧的C++头文件名如<iostream.h>将会继续被支持,虽然它们不在官方标准中。这些头文件的内容不在名字空间std中。新的C++头文件如<iostream>包括的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。(在标准化的进程中,库中有些部份的细节被修改了,所以旧头文件和新头文件中的实体不1定完全对应。) 2.所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于1个名为std的namespace中. 由于namespace的概念,使用C++标准程序库的任何标识符时,可以有3种选择: (oct 8进制 dec 10进制 hex 106进制) (1)、直接指定标识符。例如std::ostream而不是ostream。完全语句以下: std::cout << std::hex << 3.4 << std::endl; (2)、使用using关键字。 using std::cout; using std::endl; 以上程序可以写成 cout << std::hex << 3.4 << endl; (3)、最方便的就是使用using namespace std; 例如: #include <iostream> using namespace std; 这样命名空间std内定义的所有标识符都有效(暴光)。就好像它们被声明为全局变量1样。那末以上语句可以以下写:cout << hex << 3.4 << endl; 3.<iostream>和<iostream.h>是不1样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,2者是两个文件,打开文件就会发现,里面的代码是不1样的。 后缀为.h的头文件c++标准已明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区分开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是初期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。 4.在标准C++之前,都是用#include<iostream.h>这样的写法的,由于要包括进来的头文件名就是iostream.h。标准C++引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用1套新的头文件,这套头文件的文件名后不加.h扩大名,如iostream等等,并且把原来C标准库的头文件也重新命名,如原来的string.h就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包括的写法也就变成了#include
<iostream>。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |