⑴ 请教c语言和C++的命名空间问题
从技术上说,其实没有<iostream.h>这样的东西——标准化委员会在简化非C标准头文件时用<iostream>取代了
它。必须知道的是,如果编译器同时支持 <iostream>和<iostream.h>,那头文件名的使用会很微妙。例如,
如果使用了#include <iostream>, 得到的是置于名字空间std下的iostream库的元素;如果使
用#include <iostream.h>,得到的是置于全局空间的同样的元素。
在全局空间获取元素会导致名字冲突,而设计名字空间的初
衷正是用来避免这种名字冲突的发生。
iostream 里的所有内容被封装在 std 命名空间内,iostream.h 里的则没有,所以,如果 #include
<iostream>,就需要 using namespace std; 如果是 #include
<iostream.h>,就不必这样。iostream.h里面定义的所有类以及对象都是在全局空间里,所以你可以直接用cout
但在iostream里面,它所定义的东西都在名字空间std里面,所以你必须加上 using namespace std才能使用cout
一般一个C++的老的带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好
多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。
⑵ C语言里面有没有简单的方法实现命名空间效果
没什么太简单的方法。
比较通用的 避免重名的方法
1 限制有效范围
凡是仅在一个文件中使用的, 包括函数和全局变量,一律定义为static
这样即使不同文件重名,也没任何问题
2 对于整个工程有效的全局变量和函数, 加一个文件名的前缀。
比如a.c里的
可以定义变量global_1
为a_global_1
这样不同文件不会重名。
⑶ 在c语言中namespace ex2_1是什么意思
namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。
通常的using namespace std这是标准的命名空间
http://blog.csdn.net/yao_zhuang/article/details/1853625
⑷ 如何让C具有命名空间
1.最简单的方法:
publicstaticStringreverse1(Stringstr)
{
returnnewStringBuffer(str).reverse().toString();
}
2.最常用的方法:
publicstaticStringreverse3(Strings)
{
char[]array=s.toCharArray();
Stringreverse="";//注意这是空串,不是null
for(inti=array.length-1;i>=0;i--)
reverse+=array[i];
returnreverse;
}
3.常用方法的变形:
publicstaticStringreverse2(Strings)
{
intlength=s.length();
Stringreverse="";//注意这是空串,不是null
for(inti=0;i<length;i++)
reverse=s.charAt(i)+reverse;//在字符串前面连接,而非常见的后面
returnreverse;
}
4.C语言中常用的方法:
publicstaticStringreverse5(Stringorig)
{
char[]s=orig.toCharArray();
intn=s.length-1;
inthalfLength=n/2;
for(inti=0;i<=halfLength;i++){
chartemp=s[i];
s[i]=s[n-i];
s[n-i]=temp;
}
returnnewString(s);//知道char数组和String相互转化
}
⑸ VC++关于命名空间的使用
由于C++是由C语言发展而来的,C++保留了C语言中的一些规定,期中之一就是C语言的头文件用.h作为后缀,在C++开发初期为兼容C语言,许多C++编译系统保留.h后缀的方法,所以说如果头文件是#include<iostream.h>的话就不using namespace std;
⑹ 如何用c语言实现CString的构造函数,析构函数和赋值函数
1、首先C语言没办法实现构造函数和析构函数,因为C语言是面向过程的语言,没有定义面向对象的class概念。C++语言是以C语言为基础扩展出来的一种编程语言,它在继承了C语言的基础上,增加了面向对象的编程方法,其中就包含了class。
2、如果你所描述的c语言是指C++语言,那么是可以自已定义并实现CString类的一些功能。因为CString类是微软VC++ MFC实现的基础类,而非C++标准类库,所以CString类定义中使用了一些AFX函数,依赖于MFC环境,所以想自定义一个完全取代CString的类很困难,也无意义。
3、如果只是需要学习CString的构造函数、析构函数及赋值函数,可以参考MFC类库源文件:
\MICROSOFT VISUAL STUDIO\VC98\MFC\Include\AFX.INL
\MICROSOFT VISUAL STUDIO\VC98\MFC\SRC\STRCORE.CPP
\MICROSOFT VISUAL STUDIO\VC98\MFC\SRC\WINSTR.CPP
⑺ C++中std命名空间是什么概念作用是什么为什么要引入它,而不像C中的printf那样呢怎么实现的啊
首先说一下printf吧,在最早的C语言的时候,由于不是面向对象,所以所有的函数都是唯一的!也就是说你打印的话,就必然会使用printf函数,当然了,你也可以操作更底层的代码,但是一般人不会那么干的,所以PRINTF就属于唯一的函数。
后来C++出现了,并且出现了STL或者一些其他面向对象的概念和函数。那么就会出现你写的函数和系统提供的函数会发生冲突,例如你可以自己写一个sort()函数来进行排序,但是STL里面也提供了sort()函数进行排序。并且如果你调用sort()函数的话,那么系统到底是调用你写的函数呢,还是调用STL的函数呢?这就需要到命名空间了。
如果你直接sort()的话,那么可能是调用你写的函数。
但是如果你std::sort()的话,就是调用STL中的排序函数。
命名空间说白了,就是有多个同名函数,或者变量。用命名空间来区分这些同名的变量和函数。
⑻ c++命名空间是干什么用的
c++ 中引入namespace(名字空间)的概念,主要是为了减少名字冲突的问题,随着源代码规模的增大,产生名字冲突的可能性也会越来越高,如两家公司的类库中都有一个名为“Stack”的类,那么当你需要同时用到这两个公司的类库时,就会产生名字冲突,无法区分是哪一个Stack,因此,一般公司都会把自己的类,函数,变量等放在一个名字空间中,防止冲突,比如:
namespace s1
{
int a = 10;
}
namespace s2
{
int a = 20;
}
这样就在两个名字空间中声明了两个不同的变量 a,
如果想要同时在一个源文件中使用这两个 a,可以这样做:
int c = s1::a; // 表示 s1 中的 a
int d = s2::a; // 表示 s2 中的 a
⑼ C++的using namespace std表示什么意思为什么C语言没有这句话
是命名空间的意思,这样编译器在编译的时候相当于每个变量都是 命名空间+变量名,这样就可以在不同命名空间里,起同样的变量名,防止变量名用尽或者冲突。C语言没有命名空间,C和C++其实是两门语言,尽量按照他们是两门不同语言的思路来学习比较好。
⑽ c语言变量名的命名规则是什么
c语言变量名规则是:
1、变量名以英文字母开头。
2、变量名中的字母是区分大小写的。
3、变量名不能是关键字。
4、变量名中不能包含空格、标点符号和类型说明符。
变量是在C语言的基本语法对象。语言本身的变量名,依赖范围(可变的源代码文件和函数,狭窄的命名空间)唯一标识一个变量。变量名是一个标识符在C语言中,用来区分不同变量的语义。
定义:
C语音可以明确地解决分配在编译的语法对象称为左值。 &运算符的左值的地址。变量在编译时将被分配到一个IP地址是属于左值。如定义字符A,INT B,你和一个char型变量,b表示一个int变量b的地址。
大小(字符)==1,char变量占用一个字节,一个地址变量实际上是一个运行周期所占用,而内容的存储单元地址和一个值。是sizeof(int)> 1(通常是32位环境中,4)的B&B本身所占用的地址空间不说,但简单的1个字节之一。