ostream类重载的operator<<()函数
ostream类重载了operator<<()以识别不同的类型,如:
int short long unsigned int unsigned short unsigned long
float double long double char signed char unsigned char
这样cout就不用像C语言中的printf那样需要程序员自行匹配数据类型,如:printf("%s%d%f","hello world",32,3.1415)
由于C++用指向字符串位置的指针来表示字符串,因此ostream类重载了char型指针类型的插入运算符<<,即:
ostream& operator<<(void*);
ostream& operator<<(const char*);
ostream& operator<<(const signed char*);
ostream& operator<<(const unsigned char*);
后三种形式分别接受3种char型常指针,输出char型常指针指向的内容,直到遇到字符串结束符'\0',如:
char *ch1="hello world"
char ch2[12]="hello world"
cout<<ch1<<ch2<<endl;
即会调用两次ostream& operator<<(const char*)
而第一种形式则是用来输出任何类型的地址,如:
int a=3;
cout<<&a<<endl;
就会调用ostream& operator<<(void*)来输出a的地址。
由于字符串是指向第一个字符的指针,因此要获取字符串的地址,就需要将char*型指针强制转换为void*,然后才能调用operator(void*)来
输出字符串地址,否则调用的则是operator(const char*),输出的则是char型常指针指向的内容,如:
char *ch="hello world";
char s[12]="hello world";
cout<<ch<<endl; //调用operator<<(const char*)输出字符串
cout<<(void*)ch<<endl; //调用operator<<(void*)输出字符串地址
cout<<s<<endl; //调用operator<<(const char*)输出字符串
cout<<(void*)s<<endl; //调用operator<<(void*)输出字符串地址
#include <iostream>
using namespace std;
int main()
{
int a=;
int *p=&a;
cout<<p<<endl; //0x22fe98
cout<<&a<<endl; //0x22fe98 char *ch="hello world";
cout<<ch<<endl; //hello world
cout<<(void*)ch<<endl; //输出字符串ch的地址0x47f000
cout<<&ch<<endl; //输出指针ch的地址0x22fe94 char s[]="hello world";
cout<<s<<endl; //hello world
cout<<(void*)s<<endl; //输出字符串s的地址0x22fe88
cout<<&s<<endl; //输出字符串s的地址0x22fe88(因为&s是个行指针) return ;
}
ostream类重载的operator<<()函数的更多相关文章
- C++抽象编程·运算符重载与友元函数
运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...
- C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)
---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...
- C++ 友元(friend关键字)、类中的重载、操作符重载(operator关键字)
C++ 中友元的用法: 1.在类中使用friend关键字声明 2.类的友元可以是其它类或者具体函数 3.友元不是类的一部分 4.友元不受类中访问级别的限制 5.友元可以直接访问具体类中的所有成员. 友 ...
- (转) C++中基类和派生类之间的同名函数的重载问题
下面有关派生类与基类中存在同名函数 fn: class A { public: void fn() {} void fn(int a) {} }; class B : public A { publi ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- const当做标记的函数重载,但是仅仅是限于类里面的成员函数
(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,cha ...
- C++中模板类使用友元模板函数
在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...
- C++:抽象基类和纯虚函数的理解
转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ...
- c++入门之—运算符重载和友元函数
运算符重载的意义是:将常见的运算符重载出其他的含义:比如将*重载出指针的含义,将<<与cout联合使用重载出输出的含义,但需要认识到的问题是:运算符的重载:本质仍然是成员函数,即你可以认为 ...
随机推荐
- CentOS 6.x 播放 mp3 音乐 —— 成功
参考:http://blog.chinaunix.net/uid-14735472-id-3472898.html centos 6.x 添加 rpmforge 源--- CentOS 6.x 安装 ...
- Acronis 备份使用
1:至Acronis 中国官网,可了解到:Acronis True Image 是PC产品,Acronis Backup是企业产品 2:Acronis Backup 11.5.0.39029 :htt ...
- hdu1203
#include <stdio.h> #include <math.h> #define mmin(x,y) (x)<(y)?(x):(y) int main(){ +] ...
- 3D模型文件读写.Net SDK
AnyCAD .Net/C++ SDK支持多种3D/2D文件格式,比如BREP.STEP.IGES.STL.DXF.3DS.OBJ.FBX.SKP.IFC.DAE……等,根据使用场景提供不同的API. ...
- 导入Excel的时候使用TransactionScope事务控制来进行数据
最近,项目需要将Excel里面的数据导入到数据库里面,但是由于Excel里面的数据的合法性和数据格式的不确定性.所以不可能每读出一条数据,就保存到数据库中. 这就使用到了TransactionScop ...
- js dom 操作
JS的DOM操作 1DOM是文档对象模型,这种模型为树模型:文档是指标签文档,对象是指文档中每个元素:模型是指抽象化的东西. 2间隔与延迟间隔执行一段代码(函数):window.setInterv ...
- Ado.net利用反射执行SQL得到实体
public Model.orderParent GetTraceIDforID(string orderid) { string sql = string.Format(" select ...
- js问题集锦
1.不在服务器中的访问,如file:///C:/Users/yx/Desktop/index.html这样的地址,ajax是无法访问的,不会执行send();必须放到服务器才可以. 2.阻止正常提交v ...
- MapReduce数据流
图4.5细节化的Hadoop MapReduce数据流 图4.5展示了流线水中的更多机制.虽然只有2个节点,但相同的流水线可以复制到跨越大量节点的系统上.下去的几个段落会详细讲述MapReduce程序 ...
- Delphi用TActionList下载文件
TActionList有个标准动作TDownLoadURL,内部是使用的URLDownloadToFile,它下载文件时会定时产生OnDownloadProgress 事件,这样就可以用进度条显示: ...