VC++6.0之标准using namespace std

       最近一直在看由电子工业大学出版的吕老师编写的c《++语言程序设计(第三版)》,其中的程序代码书写我并不知

道有一定的缺陷,我一直沉浸在他的书中,竟然没有再去看看其他的版本,原来新的C++已经明确提出不提倡用的一

些规定这本书还在用,也是我在最近的做题陷入了一定的困境,很郁闷,后来在标准的习题中了解了一些编程代码书

写规范。今天就好好学习一下标准的代码书写。

       先来看看旧版的C++编程风格(就是目前我学的这本书)

#include <iostream.h>//旧版的C++头文件包含命令
class MyClass //定义的一个类
{
     public://类中的公有成员
     MyClass(int i)//定义的带一个参数的构造函数
     { value = i; cout << "Constructor called." << endl; }//在类内的构造函数的函数体,调用一次将会输出一次
     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; }//定义的一般的成员函数
     ~MyClass() { cout << "Destructor called." << endl; }//类内定义的析构函数,调用一次将输出一次
     private://类中的私有成员,只有成员函数才可以访问
     int value;
}
void main()//返回值类型为空的主函数
{
	MyClass obj(10);//定义的一个带参数的对象,将使用构造函数对其进行初始化
        cout<<"The value is "<<obj.GetValue()<< endl;//通过对象引用一般的成员函数
	cout << "Max number is " << obj.Max(10,20) << endl;//通过对象引用重载函数
}
       这种的编程风格也是我一直在使用的,原来存在局限性,也是将要被替代的,虽说在VC++6.0中依然可以运行,

 但是在其他的编程软件中就不再适用了,例如VS2010等等。

       现在比较多的使用下面的这种格式:

#include <iostream>//新版的C++头文件包含命令
using namespace std;
class MyClass //定义的一个类
{    public://类中的公有成员 
     MyClass(int i)//定义的带一个参数的构造函数
     {  
        value = i; 
        cout << "Constructor called." << endl;
      }//在类内的构造函数的函数体,调用一次将会输出一次
     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; }//定义的一般的成员函数 
      ~MyClass() { cout << "Destructor called." << endl; }//类内定义的析构函数,调用一次将输出一次
      private://类中的私有成员,只有成员函数才可以访问
      int value;
 };
 int main()//返回值类型为整型的主函数
{
    MyClass obj(10);//定义的一个带参数的对象,将使用构造函数对其进行初始化 
    cout<<"The value is "<<obj.GetValue()<< endl;//通过对象引用一般的成员函数
    cout << "Max number is " << obj.Max(10,20) << endl;//通过对象引用重载函数
    return 0;
}    
        原来这才是与时俱进的新C++编程代码的规范书写,那就来看看两者的区别:

        1.头文件包含命令的不同,旧版的为#include <iostream.h>当使用<iostream.h>时,相当于在c中调用库函数,使

用的是全局命名空间,也就是早期的c++实现。而新C++的#include <iostream>当使用< iostream>的时候,该头文件

没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

       #include <iostream.h>

       using namespace std; 则出错

       所以 要么写成

       #include <iostream >
       using namespace std;
       要么写成
       #include <iostream.h>

       当然最好是前种

       2.主函数的返回值类型的不同,旧版的为void main(),而新C++为int main(),严格的还要在主函数的函数体最后

一行加上return 0;要不然会出现警告错,虽然不影响程序的运行,但是按良好的编程风格来说加上是最好的。

       两者的区别还有:

       1.旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C头文件则没有(以保持对C的兼容

性)。旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在名字空

间std中。新的C++头文件如<iostream>包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中

。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。)

       2.所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的

namespace中.

       由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

      (oct  八进制     dec  十进制     hex  十六进制)

        (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内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以

如下写:cout << hex << 3.4 << endl;
        3.<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二

者是两个文件,打开文件就会发现,里面的代码是不一样的。

        后缀为.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++使用一套新的头文件,这套头文件的文件名后不加.h扩展名,如iostream等等,并且把原来C标准

库的头文件也重新命名,如原来的string.h就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包含的写法也就

变成了#include <iostream>。

         并不是写了#include<iostream>就必须用using namespace std;我们通常这样的写的原因是为了一下子把std名字

空间的东东全部暴露到全局域中(就像是直接包含了iostream.h这种没有名字空间的头文件一样),使标准C++库用

起来与传统的iostream.h一样方便。如果不用using namespace std;使用标准库时就得时时带上名字空间的全名,如

std::cout << "hello" << std::endl;为了方便的书写,就加上了using namespace std。这样可以更好的读懂编写的程序

代码。
        这就是我对目前C++格式的了解,后续的东西还会改进。

 

 

       

   

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值