C++用重载输出一个类

还记得刚开始学习C++时候,对于 cout 可以直接输出各种类型的变量很好奇。

毕竟是大一刚学完C语言,知道如果要输出什么数据肯定是要指定类型输出的 printf()。

对于C++中的一个变量 string str,使用 cout 可以直接输出string,

然而采用C中使用的 printf("%s“, str) 是绝对无法输出该变量的。因为 这里的 str 是

一个 class。而不是一个 char* 类型的变量。当然,如果非要用printf()输出 str 也不是

不可以。采用 printf("%s", str.c_str()) or printf(str.c_str()) 就可以。

  既然C++中的 cout 能够直接输出基本变量类型的变量(bool, short, int, long, float, double),

也能输出类(string)。如果对于我们自己创建的如下的一个类,能否直接使用 cout 输出呢?

   答案是否定的,错误原因已经由 宇宙最强的IDE(Visual Studio)给提示出来了。

不过根据这个错误提示,我们也大概可以推测改进代码的方法,那就是为我们自己新建的

这个类(myClass) 重载 << 运算符。

PS:

    之前在做的一个项目中,用到了 C++ 里面的 STL 的一些函数。主要是因为 STL为

我们实现好了基本的数据结构和算法,可以避免重复造轮子。在做项目之前,对于STL也

只是“久闻其声”没怎么用过,因此也是现学现用。

    虽然现学现用也完成了功能,由于缺乏对于STL 具体细节的掌握,更不清楚其底层实现。

导致有时候会遇到些“指针类错误”。而每当遇到这种问题时,为了尽快解决问题,我总是

通过搜索引擎找到一个解决方案,然后copy 到我的代码中。可是这样做的多了,我感觉很心虚。

是,的确是做了些东西,但也只是东拼西凑,缺乏了对知识系统的理解和掌握。

    痛定思痛之后,果断翻起《STL源码剖析》这本书。今天看了些基础的内容,对于其中

“重载”部分的介绍挺感兴趣。于是做了一个记录,希望能够帮助C++新人更好的掌握重载

的使用。
时间: 2024-10-20 18:56:55

C++用重载输出一个类的相关文章

通过反射来输出一个类的(包括其父类)所有方法

主函数: import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; public class reflec { public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException { TestClass r = new TestClass(); Class

Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca

#34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void printLowercaseLetter():然 后写一个类Print实现接口InterfaceA和InterfaceB,要求      方法 实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文 字母表的功能.再写一个主类E,在主类E的main方法中创建P

在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在"D:\java"文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 myPackage 包中创建一个YMD类,该类具有计算今年的年份.可以输出一个带有年月日的字符串的功能.设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名.年龄.出生日期.程序使用YMD的方法来计算年龄. 主要考包的运用 用到java.util.Calendar

第八周(运算符重载)Time类

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第八周(运算符重载) *作者:王忠 *完成日期:2015.4.28 *版本号:v1.0 * *问题描述:实现Time类中的运算符重载. *输入描述: *程序输出: #include <iostream> using namespace std; class CTime { private: unsigned short int hour; // 时 unsigned shor

输入和输出--File类

输入和输出 写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了.要玩熟Java的输入和输入,就必须先玩熟一个类:File.然后在就是Java.io包下的类和接口了.Java的IO主要包括了输入和输出2种流,每种输入和输出又分为字节流和字符流.值得注意和研究的是Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流.除此之外,还要研究2个东西:1,Java对象

【c++】c++中重载输出操作符,为什么要返回引用

针对:ostream & operator <<(ostream & os, const ClassType &object) 说明几点: 1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态:该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋值操作符函数都被放置在了private部分,且只有声明,没有定义). 2.第

如何限制一个类只在堆上分配和栈上分配(StackOnly HeapOnly)

[本文链接] http://www.cnblogs.com/hellogiser/p/stackonly-heaponly.html [题目] 如何限制一个类只在堆上分配和栈上分配? [代码] C++ Code 1234567891011121314   class StackOnly { private:     void *operator new(size_t size) {}; }; class HeapOnly { public:     void destroy(); private

写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”

源代码: package jxl;class sum{ public static int a=0; int c1; public sum(int c2){ c1=c2; a++; } public int get(){ return a; }}public class Test4 { public static void main(String[] args) { // TODO 自动生成的方法存根 //调用 sum one=new sum(2); sum two=new sum(3); //

C#1(.net和C#的关系、VS与.net的对应关系、VS2012常用的几种应用程序、C#定义一个类的方法、类页面内容的解释、定义Person的类、调用Person类的方法、命名规范、数值类型)

1..net和C#的关系 .net是一个开发平台,C#是应用在.net平台上的一种语言.   2.VS与.net的对应关系  3.VS2012常用的几种应用程序 第一种是Windows窗体应用程序,也即是我们常用的C/S端的应用软件: 第二种是控制台应用程序,主要是用来学习调试C#代码的(老师上课应用的模式): 第三种是空Web应用程序,建立空的网页模式,B/S模式: 第四种是Web 窗体应用程序,建立后会生成一些常用的网页组件和功能,例如JS.image等,也是B/S模式. 4.C#定义一个类