C++ 重载 数组对象输入输出流的实现!!!

简介: C++ 重载 数组对象输入输出流的实现!!!

C++ 重载 数组对象输入输出流的实现!!!

重载

一个对于c++学习者,必备的技能。简单的来说就是让一些符号依据他们使用对象的不同具有更多重的作用,那为什么说数组的重载呢?,那是因为一下输出多个数组,是不是有点不适应呢?小唐同学慢慢的来吧这个东西来将清楚!

输入输出流

你肯定看过头文件的 iostream 对吧

他的意思就是:输入输出流

然后就引出了

输入流

istream 不就可以和cin中的i,联系起来

输出流

ostream 不就可以和cout中的o,联系起来

!!!!!!!!!!!!!!!!重点来了

我们一般就直接在class里面的public来定义输入输出流的重载,公有嘛

public:
  friend istream & operator >> (istream&input, shuzu&A);//定义输入数组
  friend ostream & operator << (ostream&output, shuzu&A);//定义输出数组

friend,就是类的好朋友了,可以直接访问私有的数组元素了,也就是你的数组

然后你的输入输入流不就是前面提及过的istream(输入流),ostream(输出流),这个东西其实就相当于你的函数类型懂吗?
平时我们加法的重载不就是 int operator +(类型)仔细看你operator前面的类型,不就换了一下,int—>istream/ostream
因为你的 >>(输入流) <<(输出流)符号是属于输入输出流istream,ostream这一类型
好的,然后你看后面
(ostream&, shuzu&)
他就相当于直接用了ostream这个类,用了引用,后面的话就是来确定他的数组对象

ostream & operator << (ostream&ou, shuzu&A)
{
  for (int i = 1; i < 5; i++)
  {
    for (int j = 1; j < 5; j++)
      ou  << setw(2)<<A.a[i][j];
        cout << endl;
  }
  return ou;
}

这就不就很明白了,我们用一个ou来命名(可以更改的),这个时候你还要知道一点这是的ou就是相当于cout
然后是数组对吧,所以你应该,输出的时候好看一点对吧,我们空格太麻烦了,你可以直接用#include 里面的 setw(2)来填充空格,这里有个误区就是你的cout和你ou在这里并不冲突,可以直接用
最后的时候来返回,因为你是输出流里面的对象,所以你应该返回一个输出流类的,也就是return ou

代码:

#include <iostream>
#include <iomanip>
using namespace std;
class shuzu
{
  public:
  friend istream & operator >> (istream&, shuzu&);//定义输入数组
  friend ostream & operator << (ostream&, shuzu&);//定义输出数组
  private:
  int a[4][4];
};
istream & operator >> (istream&in, shuzu&A)
{
  for (int i = 1; i < 5; i++)
  for (int j = 1; j < 5; j++)
    in >> A.a[i][j];
  return in;
}
ostream & operator << (ostream&ou, shuzu&A)
{
  for (int i = 1; i < 5; i++)
  {
    for (int j = 1; j < 5; j++)
      ou  << setw(2)<<A.a[i][j];
        cout << endl;
  }
  return ou;
}
int main()
{
   shuzu A;
   cin>>A;
   cout<<A;
   return 0;
}


相关文章
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
9月前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
8月前
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
8月前
|
存储 编译器 C++
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
|
8月前
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
10月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
220 19
|
10月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
394 13
|
10月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
216 5
|
9月前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
9月前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。