VC++6.0之标准using namespace std

最近一直在看由电子工业大学出版的吕老师编写的c《++语言程序设计(第三版)》,其中的程序代码书写我并不知道有一定的缺陷,我一直沉浸在他的书中,竟然没有再去看看其他的版本,原来新的C++已经明确提出不提倡用的一些规定这本书还在用,也是我在最近的做题陷入了一定的困境,很郁闷,后来在标准的习题中了解了一些编程代码书写规范。今天就好好学习一下标准的代码书写。

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

<font size="4"><span style="color:#ff0000;">#include <iostream.h>//旧版的C++头文件包含命令
</span>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;
};
<span style=""><span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">void main()//返回值类型为空的主函数</span>
</span></span>{
	MyClass obj(10);//定义的一个带参数的对象,将使用构造函数对其进行初始化
    cout<<"The value is "<<obj.GetValue()<< endl;//通过对象引用一般的成员函数
	cout << "Max number is " << obj.Max(10,20) << endl;//通过对象引用重载函数
}</font>

这种的编程风格也是我一直在使用的,原来存在局限性,也是将要被替代的,虽说在VC++6.0中依然可以运行,但是在其他的编程软件中就不再适用了,例如VS2010等等。

再来看看新的C++的编程的书写:

<span style="color:#ff0000;">#include <iostream>//新版的C++头文件包含命令</span>
<span style="color:#ff0000;">using namespace std;</span>
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;
};
<span style="color:#ff0000;">int main()//返回值类型为整型的主函数
</span>{
	MyClass obj(10);//定义的一个带参数的对象,将使用构造函数对其进行初始化
    cout<<"The value is "<<obj.GetValue()<< endl;//通过对象引用一般的成员函数
	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>

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。这样可以更好的读懂编写的程序代码。

时间: 2024-10-29 03:43:47

VC++6.0之标准using namespace std的相关文章

VC++6 0升级到VC++2010理由之一(符合C++标准编写更加安全的代码)

VC++6.0升级的一个很大的障碍就是代码不兼容,但是VC++6.0的C++不够标准,不够安全,存在诸多安全漏洞,内存析出,缓冲区溢出,等等,代码的安全性,可靠性得不到有利的保障,为了您的软件的长治久安,以及在Windows7平台上的迁移,请克服代码兼容性带来的麻烦,一定要设法升级到VC++2010. 关于C++中异常的争论何其多也,但往往是一些不合事实的误解.异常曾经是一个难以用好的语言特性,幸运的是,随着C++经验的积累,今天我们已经有足够的知识轻松编写异常安全的代码了,而且编写异常安全的代

图解VC++6.0和ACE 5.4 开发入门

一 工具和下载 工具和环境: Win7, VC++6, ACE5.4 可在Win7下运行的VC6下载: http://blog.csdn.net/bcbobo21cn/article/details/44200205 ACE安装包和本文demo代码下载: http://pan.baidu.com/s/1kUUOOlh 注意有两个ace安装包,5.4是dsw的工程,6.3是sln的工程 二 安装环境 下载ace54,解压: 在vc6.0中打开ace源码: 2个工程:网上资料有说3个工程: 在工程中

using namespace std;的注意事项

作者:zhang.jingjing链接:转自  https://www.zhihu.com/question/26911239/answer/51503880来源:知乎 因为使用STL中 有部分名称是没有加下划线的保留标记的而在自己的源代码中用到了后会引发未定义的后果 例如: #include <algorithm> using namespace std; int main() { int max=0; } 一直我都告诫学习C++的人 以后精通了C++就不要用using namespace

std::和using namespace std;

std是标准命名空间名称 相同点: std::和using namespace std:的意思是一样的,都表示使用命名空间std: 不同点: 放在程序中的位置不同 1. using  namespace  std:头文件如果包含了#include<iostream>,那么在头文件下方写上using  namespace  std:2.std::头文件如果包含了#include<iostream>,但是没有在头文件下方写上using  namespace  std:那么在使用标准输入

PC-Lint的安装详细配置过程(以VC++6.0环境为例)

本文主要介绍了PC-Lint安装后针对VC++6.0开发环境进行配置的详细过程,总共分为三部分,下面依次对这三部分进行说明. 一.   首先下载PC-Lint,然后开始安装,一路"下一步"直到安装完成.此时会弹出一个对话框,询问你是否进行配置,点击确定,然后进入第二步的配置过程.注意,笔者这里默认将安装路径放在C盘下.读者修改安装路径后需注意这个路径和后续的配置有很大的关系. 二.   接下来就是配置PC-Lint的过程,如图1至图20所示. 图1   PC-Lint配置过程 图2  

【转】关于“using namespace std”

对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std.这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义.其作用就在于避免发生重命名的问题. 1. 关于namespace C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象.解决方法就是加上自己的命名空间.比如下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 1

Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件

最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的... 简单的第一次尝试,就大致梳理一下看书+自己理解的东西. 1.首先是对Winsock的一点介绍:Winsock是一种标准的API(应用程序编程接口),主要用于网络中的数据通信,它允许两个应用程序在同一台机器上或通过网络相互通信.需要注意的是Winsock和协议无关,使用Winsock编程接口,应用程序可通过普通网络协议如:TCP/IP(网络

C++ using namespace std(转载)

转载自http://www.kuqin.com/language/20080107/3532.html 感谢这位大神的解答! 以下的内容摘抄自转载的文章里面的部分内容. 早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h. 因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现:当使用<iostream>的时候,该头文件没有定义全局命名空

using namespace std

using namespace std std 是一个命名空间..不同的命名空间可以有相同的类名被定义 ..using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的也可以在全局空间中定义,只要名字空间不一样即可..)..否则可以默认名字空间中有std.便不用std::来修饰它是C++新标准中有的,解决多人作编大程序时名字冲突问题.比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这