测试.cpp

// 数组类_类的设计和测试程序.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"
#include "myArray.h"
#include<iostream>
using namespace std;
//类的框架设计完毕
//类的测试案例
//重载[],返回值可以是3种不同的返回类型,至于选择什么,要看调用方式
//void operator[](int i)
//int operator[](int i)
//int& operator[](int i)
int main()
{myArray a1(10);//赋值for (int i = 0; i < a1.length(); ++i){//a1.setData(i, i);//2a1[i]=i;}//打印cout << "打印数组a1" << endl;for (int i = 0; i < a1.length(); i++){//cout << a1.getData(i) << " ";//1cout<<a1[i]<<' ';}cout << endl;myArray a2 = a1;cout << "打印数组a2" << endl;for (int i = 0; i < a2.length(); ++i){cout << a2.getData(i) <<" ";}cout << endl;//3myArray a3(5);{a3 = a1;a3 = a2 = a1;cout << "\n打印数组a3: ";for (int i = 0; i<a3.length(); i++){cout << a3[i] << " ";}cout << endl;//a3.operator=(a1)//Array& operator=(Array &a1)}//功能4if (a3 == a1){cout << "相等" << endl;}else{cout << "不想等" << endl;}//5if (a3 != a1){printf("不相等\n");}else{printf("相等\n");}////a3.operator!=(a1)// bool operator!=(Array &a1);system("pause");return 0;
}

myArray.h

#pragma once
class myArray
{
public:myArray(int length);myArray(const myArray& obj);~myArray();
public:void setData(int dex, int value);int getData(int dex);int length();
public://函数返回值当左值,需要返回一个引用//函数返回值当左值,需要返回一个引用//重载[]int& operator[](int i);//重载=myArray& operator=(myArray &a1);//重载==bool operator==(myArray &a1);//重载!=bool operator!=(myArray &a1);
private:int m_length;int *m_space;
};

myArray.cpp

#include "myArray.h"
#include<stdio.h>
/*
private:int m_length;int *m_space;
*/
myArray::myArray(int length)
{if (length < 0){m_length = 0;}m_length = length;m_space = new int[m_length];
}
//myArray a2=a1;
myArray::myArray(const myArray&obj)
{//手动实现深拷贝this->m_length = obj.m_length;this->m_space = new int[obj.m_length];for (int i = 0; i < obj.m_length; ++i){this->m_space[i] = obj.m_space[i];}
}
myArray::~myArray()
{if (m_space != NULL){delete[]m_space;m_length = -1;}
}
void myArray::setData(int dex, int value)
{m_space[dex] = value;
}
int myArray::getData(int dex)
{return m_space[dex];
}
int myArray::length()
{return m_length;
}//1 2
int& myArray::operator[](int i)
{return m_space[i];
}
//3     myArray a2 = a1;
//因为数组类中含有指针,所以在赋值的时候会有浅拷贝问题(在析构的时候会出问题)
//可以用重载=操作符解决这一问题
//重载=操作符的一般步骤:1.释放原来的内存空间2.根据a1大小给a2分配内存3.copy数据
myArray& myArray::operator=(myArray &a1)
{//为了支持链式(a3=a2=a1),左值不能是void,所以要返回引用//1.if (this->m_space != NULL){delete[]m_space;m_length = 0;}//2.m_length = a1.m_length;m_space = new int[m_length];//3.for (int i = 0; i < m_length; i++){m_space[i] = a1[i];//因为[]操作符已经被重载过了,所以这里可以直接用}return *this;
}
//4  if (a3 == a1)
bool myArray::operator==(myArray &a1)
{if (this->m_length != a1.m_length){return false;}for (int i = 0; i <m_length; i++){if (this->m_space[i]!=a1[i]){return false;}}return true;
}
bool myArray::operator!=(myArray &a1)
{/*if (*this == a1){return true;}else{return false;}*/return !(*this == a1);
}

c++操作符重载(数组类重载[]、=、==、!=操作符)相关推荐

  1. 2021-08-13c++——类之操作符重载

    +号重载 1)成员函数重载 如果要返回Person类,构造Person的时候就一定要赋初始值. 如果不赋予初始值,就一定要有默认初始值,因为提供了含参构造函数,编译器就不会再提供默认构造函数了. #i ...

  2. C++学习基础八——重载输入和输出操作符

    C++学习基础八--重载输入和输出操作符 一.重载输入操作符的要点: 1.返回值为istream &. 2.第一个参数为istream &in. 3.第二个参数为自定义类型的引用对象( ...

  3. 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载...

    2019独角兽企业重金招聘Python工程师标准>>> 在我们学习C++的过程中,我们难免会遇到类,在类中有6个默认的函数,它们分别为:构造函数.拷贝构造函数.析构函数.赋值操作符重 ...

  4. C++基础知识 —— 内存分区模型、引用、函数重载、类和继承、this指针、友元、多态、文件操作

       参考 黑马程序员 C++课程笔记,个人理解及整理  可以使用 在线编译c++代码 来简单验证.学习代码 目录 C++核心编程 1. 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 ...

  5. C++:运算符重载与类的赋值运算符重载函数

    目录 章节知识架构 一.运算符重载 1. 运算符重载的基本概念 代码段1 2.关于运算符重载的重要语法细则 二.运算符重载在类中的使用 三.类的默认成员函数:=重载函数(赋值运算符重载) 1.自定义= ...

  6. C++ 自定义string类 重载相关运算符

    c++提供的string类 c++提供的string类可以做很多事情,它本质上是也是类,它的很多运算符都是通过重载进行实现的. 今天我们自己来简单来实现MyString类来模拟 string类能做得一 ...

  7. C++运算符重载(类内、外重载)

    1.概念   运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数).   用函数的 ...

  8. C# 类型运算符重载在类继承中的调用测试

    C# 类型运算符重载在类继承中的调用测试 这是一篇晦涩难懂的片面的研究 一,简单的继承层次 class CA {}class CB : CA{}class CC : CB{}}void Test(CA ...

  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...

    9.18. 数组函数和操作符 表 9.48显示了可以用于数组类型的操作符. 表 9.48. 数组操作符 操作符 描述 例子 结果 = 等于 ARRAY[1.1,2.1,3.1]::int[] = AR ...

最新文章

  1. 老师吴恩达,身家又增20亿
  2. KeyMob移动广告聚合平台给予开发者服务!
  3. vim技巧总结-查找
  4. 【干货】引爆公式,让你的APP成为下一个“爆款”!
  5. 近几年,关于基于Imagenet数据集图像分类的模型总结
  6. python序列类型包括字符串_python序列类型字符串列表元组
  7. 三,位操作类指令:包括逻辑运算指令,测试指令和移位指令
  8. mysql数据库下的所有表字段
  9. C语言 实现面向对象
  10. 计量检定与计量校准证书的区别
  11. W10一键进入安全模式
  12. 汇编语言 程序设计 顺序结构
  13. 《中国通史》纪录片100集笔记(持更)
  14. 提供数据库连接池 和数据库连接
  15. PostGIS官方教程汇总目录
  16. 印度萌新令人绝望的操作:提交PR“轰炸”近40万开发者,GitHub负责?
  17. Linux学习笔记(一) -- 在虚拟机中安装Ubuntu 18.04
  18. 21世纪东方美女标准[男士参考女士学习]
  19. gta5正版服务器在哪儿,gta5服务器在哪里 | 手游网游页游攻略大全
  20. 找出你的高价值潜在用户 - 通过归因分析实现用户画像和精准营销

热门文章

  1. AttacKG: Constructing Technique Knowledge Graph from Cyber Threat Intelligence Reports代码复现
  2. 小米净水器与小区过滤价格水对照.xls
  3. tinyxml 读取文本节点_c++中用TINYXML解析XML文件
  4. 2017秋招-技术岗-闪银
  5. 为什么996成为中国程序员永远的痛?
  6. nohup.out是什么文件?nohup.out如何写?
  7. eclipse安装教程完整版
  8. 车企接连押注「重感知」 ,高精地图真会被弃用?
  9. qs北邮计算机,2018年北京邮电大学世界排名、中国排名、专业排名
  10. SpringBoot和日志框架:缘由,日志框架的选择,使用,自定义配置,日志框架切换