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++抽象编程&#183;运算符重载与友元函数
运算符重载(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联合使用重载出输出的含义,但需要认识到的问题是:运算符的重载:本质仍然是成员函数,即你可以认为 ...
随机推荐
- Swift 圆角设置
故事面板中设置圆角(storyboard) Key Path layer.borderWidth(边框宽度) layer.cornerRadius(圆角弧度) layer.borderColor(边框 ...
- sync_object not in (&#39;TBL_Territory&#39;)
sync_objec 不包含TBL_Territory这个字段
- MFC记住上次路径---遇到的一些问题
今天完成一个需求,就是记住用户选择的文件路径,先是熟悉代码,然后在网上找解决方法,一开始感觉没什么,网上的方法差不多,应该很容易做出来,结果真是卡了一半天,到晚上自己才慢慢的搞清楚了. 遇到的问题真不 ...
- DOM4J介绍与代码示例【转载】
DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JA ...
- 探索React生态圈
原文地址:http://www.csdn.net/article/2015-08-04/2825370-react 2004年,对于前端社区来说,是里程碑式的一年.Gmail横空出世,它带来基于前端渲 ...
- 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
题目大意 求多组i到j的最短路径 并输出字典序最小.... 现在只会floyd的方式 利用dis[i][j] 表示i到j的路径中i 后面的节点 更新是比较dis[i][j] dis[i][k]. 记住 ...
- 004.Create a web app with ASP.NET Core MVC using Visual Studio on Windows --【在 windows上用VS创建mvc web app】
Create a web app with ASP.NET Core MVC using Visual Studio on Windows 在 windows上用VS创建mvc web app 201 ...
- SDN第五次上机作业--基于组表的简单负载均衡
0.作业链接 http://www.cnblogs.com/easteast/p/8125383.html 1.实验目的 1.搭建如下拓扑并连接控制器 2.下发相关流表和组表实现负载均衡 3.抓包分析 ...
- float和position的使用
http://blog.csdn.net/yaodebian/article/details/58621183
- Python标准库内置函数complex介绍
from:http://www.jb51.net/article/57798.htm 本函数可以使用参数real + imag*j方式创建一个复数.也可以转换一个字符串的数字为复数:或者转换一个数字为 ...