请教C++问题,高手进!!

2024-11-29 15:45:53
推荐回答(4个)
回答1:

C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间 如果include头文件的时候加上.h,默认会using namespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的
iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了
但用iostream要加名词空间namespace
#include
或者是
#include
using namespace std;
二者都行
#include是C语言中比较通用的
#include
using namespace std;
是C++中比较通用的
#include 这样写,里面的函数都是全局函数.
不加.h的是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改
而加.h的是c语言的用法,但是在c++中也支持这种用法,主要是为了向下兼容c 的内容,我们平时尽量不用这种方法
iostream是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改。iostream包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。) 一般情况下应该用这个头文件,而iostream.h则是老式的,以后有可能被淘汰。

经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。
现在来看看下面两个include:
#include // 这个就是1998年标准化以后的标准头文件
#include // 这个就是标准化以前的头文件

更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。 使用前者,就需要在代码中添加语句:using namespace std;
看看下面这两个头文件
// 标准化后经过改造的C的标准库,所有的组件都放在了std中
#include
// 标准化以前C++中的C标准库
#include
// 在看看这个头文件C标准库下 基于char* 的字符处理函数库
#include
// 在标准化以后他变成了这样
#include
// 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class
#include

经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0,BC5.0)上能顺利通过编译的源文件,在支持新标准的编译器上可能无法顺利通过编译也就是很正常的事了。

[起因]
在回过头来看看标准程序库,这个程序库涵盖范围相当广大,提过了许许多多好用的功能。正是因为这样标准程序库中class的名称和函数名与第三方提供的程序库中的class名或是函数名发生名字冲突的可能性大大增大。为了避免这个问题的发生,标准委员会决定将标准程序库中每一样东西都放在namespace std中。但是这么做同时有引来了一个新的问题。很多C++程序代码依赖那些已经存在很多年的C++ “准”标准程序库(C++迟迟未标准化才导致这些情况的发生),例如iosteam.h,complex.h等等。

为了解决这个新出现的问题,标准化委员会决定设计一些新的头文件名,给那些穿上std外衣的组件所使用。把C++头文件的.h去掉,于是就有前面出现的iostream,同样C的头文件也做了相同的处理,同时在前面加上了一个字母c,以表示是C的头文件(感觉上有中种族歧视的感觉)。同时标准化委员会声明就有的C++头文件将不再列于被支持的名单之中了,而旧有的C头文件为了满足“对C的兼容性”这个古老契约,仍然将继续存活下去。
但是,那些编译器厂商不可能去推翻他们客户的旧有编译器(也跟本不会去这么做),所以那些旧有的C++头文件仍然苟延残喘的活了下来,并不断的扰乱那些C++新兵的心智。

下面就是现在大多数C++开发工具表示头文件的组织状态:
1. 旧的C++头文件 比如iostream.h,他们虽然被标准化委员会所抛弃,但由于各大厂商为了各自的商业利益仍然将继续存活下去,这些头文件的内容将不处于namespace std中。
2. 新的C++头文件如iostream虽然提供了和旧有头文件相同的功能,但他的内容都并入了namespace std中,从而有效避免了名字污染的问题。
3. 标准C的头文件如stdio.h继续获得支持,这类文件的内容并未放在std中。
4. C函数库的技能也有对应的新式C++版本,起名称类似cstdio,这类头文件的内容也有幸穿上了std的外衣。

其实标准化以后的标准程序库的改动并不只有这些而已,很多的标准化组件都被“tamplate化”。其中就有元老级人物iostream。标准程序库的问题并不是用一篇,两篇文章就可以说清楚的。如果你像进一步的了解C++的标准程序库的话,你可以看看侯先生的《C++标准程序库》。

回答2:

#include
这里的iostream就是一个头文件,相对于iostream.h来说,是一个升级版本。之所以保留了带有.h的,是因为当时已经有许多工程采用了旧版的iostream.h 来完成的,直接修改会导致那些代码无法正常 编译,所以就多了一个不带.h的头文件。

而现在的代码,基本上都会用iostream而不再使用iostream.h,只有一些旧的教科书上会有,当然,vc 6.0是个古老的东西,上面只有iostream.h,而没有改良过的iostream文件。

iostream是一个C++的头文件,只是略去了.h,保证可和和旧的带.h的文件共存

回答3:

只要写一个,建议在我的基础上进行。
/ /头文件

#IFNDEF CKCOMPLEX_H

#DEFINE CKCOMPLEX_H

#包括文件

使用命名空间std;

类CkComplex BR /> {

朋友双层ABS(常量CkComplex&);/ /定义和的平方值

的朋友CkComplex运营商+(常量CkComplex&常量CkComplex的&);/ /定义加上

朋友二,注意CkComplex ^(常量CkComplex&INT);/ /定义功率^优先级低于其他,使用时要加()(Z ^)+ B,不能写入为z ^ + B = Z ^(A + B)

的朋友CkComplex运营商*(常量CkComplex&CkComplex常量&);/ /定义

朋友istream的&操作符>>(istream的CkComplex的);/ /定义输入

市民:

/ **默认构造函数* /

CkComplex();

CkComplex的(CkComplex常量及其他){X = another.GetX (),Y = another.GetY();};

/ **默认的析构函数* /

虚拟CkComplex();

CkComplex(双,双B):X(一),Y(B){};

CkComplex(双A):(一),Y(0){};

保护:

私人:

双X;

双Y;

双GETX()const的{返回X;}

双杰蒂()const的{返回y;}

}
>

#楼得分/ / CKCOMPLEX_H。

/ / CPP #包括

#包括



使用命名空间std;

#包括“ckcomplex.h的”

CkComplex :: CkComplex():X(0),Y(0)

{

/ /构造函数

}

CkComplex ::CkComplex()

{

/ /析构函数

}

BR /> CkComplex符+(常量,const CkComplex的CkComplex及左,右)

{

双A,B;

= left.x + right.x

B =离开。 Y + right.y的;

的返回CkComplex(A,B);

}

CkComplex运算符^(常量CkComplex左,INT右)

{

双,B;

= left.x;

B = left.y的;

而( - ){

双X = A;

双Y = B

= X * left.xy * left.y的;

B= Y * left.x + X * left.y;

}

回报CkComplex请(一个,B );

}

CkComplex运算符*(const的CkComplex左,CkComplex常量右),

{

双A,B;

=离开X * right.x left.y * right.y的;

B= left.y * right.x + left.x * right.y

的返回CkComplex(A,B); BR />}

双ABS(常量CkComplex&C)

{

返回CX CX + CY * CY;

}

istream的&操作符>>(istream的,CkComplex右)

{

在>> right.x >> right.y;

回报;
}

回答4:

它也是一个集成好的类 你在引用时 相当于直接包含这个头文件就可 包含了 就可以在其中直接应用包含在这个类中的方法 就相当于继承