永发信息网

#include<iostream.h> intmain(){cout<<end<<hello,everbody>>returno;}不改变主程序添加类

答案:1  悬赏:20  手机版
解决时间 2021-02-20 21:58
使得输出结果为Ok,I am coming...
Hello,Every body!!!
Thanks,Goodbye!
最佳答案
现在的C一般都支持C++,所以用cout也可以
具体如下:
cout
C++编程语言互换流中的标准输出流,需要iostream.h支持。读为 "c out"
使用范例:
#include
int main()
{
int a;
cout<<"请输入一个数字,按回车结束"< cin>> a;
cout<>的玩意,究竟算怎么回事呢?我一直想把它们当作关键字,可偏偏不是,而且居然是用C++语言“做”出来的,呵!但printf()用多了就开始有人好心地批判我的程序“C语言痕迹过重”……
后来随着学习的深入,总算大概明白了cout/cin/cerr/...的鬼把戏:那些东东不过是变着法儿“哄人”,其实说到底还是函数调用,不过这函数有些特殊,用的是运算符重载,确切地说(以下还是以cout为例)是重载了“<<”运算符。我们现在就让它现出函数的本来面目,请看HelloWorld!的等效版本:
#include
usingnamespacestd;
intmain()
{
cout.operator<<("Hello,World!");
cout.operator<<(endl);
return0;
}
编译运行,结果与经典版无二。上面程序应该更容易理解了:cout是一个iostream类的对象,它有一个成员运算符函数operator<<,每次调用的时候就会向输出设备(一般就是屏幕啦)输出东东。嗯,这里有一个问题:为什么函数operator<<能够接受不同类型的数据,如整型、浮点型、字符串甚至指针,等等呢?
我想你现在已经猜到了,没错,就是用运算符重载。运算符函数与一般函数基本无异,可以任意重载。标准库的设计者们早已经为我们定制了iostream::operator<<对于各种C++基本数据类型的重载版本,这才使得我们这些初学者们一上来就享受到cout<<"Hello,World!"<
cout.operator<<("Hello,World!").operator<<(endl);
才算“强等效”。究竟可不可以这样写?向编译器确认一下……OK,NoProblem!
嗯,我们已经基本上看出了cout的实质,现在不妨动动手,自己来实现一个cout的简化版(Lite),为了区分,我们把我们设计的cout对象命名的myout,myout对象所属的类为MyOutstream。我们要做的就是为MyOutstream类重载一系列不同类型的operator<<运算符函数,简单起见,这里我们仅实现了对整型(int)与字符串型(char*)的重载。为了表示与iostream断绝关系,我们不再用头文件iostream,而使用古老的stdio中的printf函数进行输出,程序很简单,包括完整的main函数,均列如下:
#include//在C和一些古老的C++中是stdio.h,新标准为了使标准库
//的头文件与用户头文件区别开,均推荐使用不用扩展名
//的版本,对于原有C库,不用扩展名时头文件名前面要加c
classMyOutstream
{
public:
constMyOutstream&operator<<(intvalue)const;//对整型变量的重载
constMyOutstream&operator<<(char*str)const;//对字符串型的重载
};
constMyOutstream&MyOutstream::operator<<(intvalue)const
{
printf("%d",value);
return*this;//注意这个返回……
}
constMyOutstream&MyOutstream::operator<<(char*str)const
{
printf("%s",str);
return*this;//同样,这里也留意一下……
}
MyOutstreammyout;//随时随地为我们服务的全局对象myout
intmain()
{
inta=2003;
char*myStr="Hello,World!";
myout<
return0;
}
我们已经的myout已经初具形态,可以为我们工作了。程序中的注释指出两处要我们特别注意的:即是operator<<函数执行完毕之后,总是返回一个它本身的引用,输出已经完成,为何还要多此一举?
还记得那个有点奇异的cout.operator<<("Hello,World!").operator<<(endl)么?它能实现意味着我们可以连着书写
cout<<"Hello,World!"<
而不是
cout<<"Hello,World!";
cout<
为何它可以这样连起来写?我们分析一下:按执行顺序,系统首先调用cout.operator<<("Hello,World!"),然后呢?然后cout.operator<<会返回它本身,就是说在函数的最后一行会出现类似于return*this这样的语句,因此cout.operator<<("Hello,World!")的调用结果就返回了cout,接着它后面又紧跟着.operator<<(endl),这相当于cout.operator<<(endl)——于是又会进行下一个输出,如果往下还有很多<<算符,调用就会一直进行……哇噢,是不是很聪明?现在你明白我们的MyOutstream::operator<<最后一行的奥妙了吧!
再注意一下main函数中最激动人心的那一行:
myout<
我们知道,最后出现的"\n"可以实现一个换行,不过我们在用C++时教程中总是有意无意地让我们使用endl,两者看上去似乎一样——究竟其中有什么玄妙?查书,书上说endl是一个操纵符(manipulator),它不但实现了换行操作,而且还对输出缓冲区进行刷新。什么意思呢?原来在执行输出操作之后,数据并非立刻传到输出设备,而是先进入一个缓冲区,当适宜的时机(如设备空闲)后再由缓冲区传入,也可以通过操纵符flush进行强制刷新:
cout<<"Hello,World!"<<"Flushthescreennow!!!"<
这样当程序执行到operator<<(flash)之前,有可能前面的字符串数据还在缓冲区中而不是显示在屏幕上,但执行operator<<(flash)之后,程序会强制把缓冲区的数据全部搬运到输出设备并将其清空。而操纵符endl相当于<<"\n"<
不过可能在屏幕上显示是手动刷新与否区别看来都不大。但对于文件等输出对象就不大一样了:过于频繁的刷新意味着老是写盘,会影响速度。因此通常是写入一定的字节数后再刷新,如何操作?靠的就是这些操纵符。

C++的iostream家族 VS C的print/scanf家庭
好了,说了这么多,C++的iostream家族与C的print/scanf家庭相比究竟有何优势?首先是类型处理更安全、智能,想想printf中对付int、float等的"%d"、"%f"等说明符真是多余且麻烦,万一用错了搞不好还会死掉;其次是扩展性更强:我要是新定义一个复数类Complex,printf对其是无能为力,最多只能分别输出实、虚部,而iostream使用的<<、>>操作符都是可重载的,你只要重载相关的运算符就可以了;而且流风格的写法也比较自然简洁,不是么?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天天米线地址在哪,我要去那里办事
衣橱怎么去啊,有知道地址的么
农村搭棚子用的那布叫甚么
求台湾耽美作家的小说
户户通没智能卡怎么安装?
核电站方圆几米内不可以住人
杨子精品店地址在哪,我要去那里办事
请问下.我家的电脑下载很快玩游戏很慢怎么回
这是什么方法求解的
下图是细胞膜结构图,下表是海水和某海洋植物
同城网络公司在哪里啊,我有事要去这个地方
有首歌歌词是琴琴转,菊花圆歌…的,是什么歌
金湖65挤出机的主机转速和喂料转速根据什么来
任记七中刀削面怎么去啊,有知道地址的么
85版本女散打的装备应该怎么搭配,
推荐资讯
英国面积有中国大吗?
什么东西好卖又赚钱
“竹外桃花三两枝,春江水暖鸭先知”此诗句中
在江西上临床医学大专哪所学校比较好?
如图,见下图回答问题(6分)(1)请分别写出
卫星电视机顶盒恢复出厂设置后怎么还原
白户办理各银行信用卡需要什么条件
正元商行地址在什么地方,想过去办事
四川泛亚供应链管理有限公司这个地址在什么地
怎么导出微信收藏的语音
黑依在什么地方啊,我要过去处理事情
娥公寨怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?