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 *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 

    ]="hello world";
    cout<<s<<endl;             //hello world
    cout<<(void*)s<<endl;        //输出字符串s的地址0x22fe88
    cout<<&s<<endl;            //输出字符串s的地址0x22fe88(因为&s是个行指针) 

    ;
}

ostream类重载的operator<<()函数的更多相关文章

  1. C++抽象编程&#183;运算符重载与友元函数

    运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...

  2. (转) C++中基类和派生类之间的同名函数的重载问题

    下面有关派生类与基类中存在同名函数 fn: class A { public: void fn() {} void fn(int a) {} }; class B : public A { publi ...

  3. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  4. const当做标记的函数重载,但是仅仅是限于类里面的成员函数

    (1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,cha ...

  5. C++中模板类使用友元模板函数

    在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...

  6. C++:抽象基类和纯虚函数的理解

    转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ...

  7. c++入门之—运算符重载和友元函数

    运算符重载的意义是:将常见的运算符重载出其他的含义:比如将*重载出指针的含义,将<<与cout联合使用重载出输出的含义,但需要认识到的问题是:运算符的重载:本质仍然是成员函数,即你可以认为 ...

  8. C++运算符重载形式——成员函数or友元函数

    运算符重载是C++多态的重要实现手段之一.通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能. 运算符重载的我们需要坚持四项基本原则: (1)不可 ...

  9. 关于C++中操作符重载的疑问 :四个运算符=, -&amp;gt;, [], ()不可以重载为全局函数(友员函数)

    转载自:http://blog.csdn.net/u014610226/article/details/47679323     以下是对C++中不能重载为友元函数的四个运算符进行了详细的分析介绍,需 ...

随机推荐

  1. ubuntu实现ramdisk

    1. linux内核提供了16个ramdisk供使用者使用,只需格式化,并挂在便可以使用.查看 ls /dev/ram* 2. 修改配置文件: sudo gedit /etc/default/grub ...

  2. java获取到机器IP地址及MAC码

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetAddress; import java.ne ...

  3. C#的变迁史 - C# 3.0篇

    C# 3.0 (.NET 3.5, VS2008) 第三代C#在语法元素基本完备的基础上提供了全新的开发工具和集合数据查询方式,极大的方便了开发. 1. WPF,WCF,WF 这3个工程类型奠定了新一 ...

  4. JMS学习(三)JMS 消息结构之属性及消息体详解

    一.前言 通过上一篇的学习我们知道了消息分为三个部分,即消息头,属性及消息体,并对消息头的十个属性进行了详细的介绍,本文再对消息属性及消息体进行详细的介绍. 二.属性介绍 消息属性的主要作用是可以对头 ...

  5. ArcGIS Engine开发之旅04---ARCGIS接口详细说明

    原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.    ...

  6. [hackerrank]Closest Number

    https://www.hackerrank.com/contests/w5/challenges/closest-number 简单题. #include <iostream> #inc ...

  7. 格林治时间,也就是返回从 UTC 1970 年 1 月 1 日午夜开始经过的毫秒数。

    格林治时间,也就是返回从 UTC 1970 年 1 月 1 日午夜开始经过的毫秒数. (* Delphi获取13位格林治时间实现方法, 与java中的java.lang.System.currentT ...

  8. SPOJ 1812 Longest Common Substring II(后缀自动机)

    [题目链接] http://www.spoj.com/problems/LCS2/ [题目大意] 求n个串的最长公共子串 [题解] 对一个串建立后缀自动机,剩余的串在上面跑,保存匹配每个状态的最小值, ...

  9. JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

    JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...

  10. mysql MHA架构搭建过程

    [环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 系统 IP 主机名 备注 版本 xx系统 192.168.142. ...