//自定义数组类
#include<iostream>
using namespace std; //分析:能获取数组长度,添加元素,删除元素,修改元素
//要求重载[],=,==,!=运算符 class MyArray
{
private:
int mLength;
int* mSpace; public:
MyArray(int length){
cout << "有参构造函数被调用了1" << endl;
mLength = length;
mSpace = new int[mLength];
memset(mSpace, , sizeof(int)*mLength);
}
MyArray(const MyArray& obj){
cout << "拷贝构造函数被调用了2" << endl;
mLength = obj.mLength;
mSpace = new int[mLength];
int i = ;
for (i = ; i < mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
}
int length(){
return mLength;
}
void setData(int index, int value){
if (index>(mLength-))
{
cout << "数组越界!" << endl;
return;
}
mSpace[index] = value;
}
int getData(int index){
if (index>(mLength - ))
{
cout << "数组越界!" << endl;
return ;
}
return mSpace[index];
}
void PrintfA(){
for (int i = ; i < mLength; i++)
{
cout << "第"<<i<<"个元素是" << mSpace[i] << endl;
}
}
~MyArray(){
cout << "析构函数被调用了3" << endl;
if (mSpace!=NULL)
{ delete[] mSpace;
}
mLength = ;
}
public:
//[]操作符重载
int & operator[](int num){
if (num>(mLength-))
{
cout << "数组越界!" << endl;
return mSpace[mLength - ];
}
return mSpace[num];
}
//=操作符重载
MyArray & operator=(MyArray &obj){
mLength = obj.mLength;
if (mSpace==NULL)
{
mSpace = new int[mLength];
}
else{
//释放原来的数组内存
delete[] mSpace;
mSpace = new int[mLength];
}
int i = ;
for (i = ; i < mLength; i++)
{
mSpace[i] = obj.mSpace[i];
}
return *this;
}
//==操作符重载
bool operator==(MyArray &myarr){
bool flag = true;
if (mLength != myarr.mLength)
{
flag = false;
return flag;
}
for (int i = ; i < mLength; i++)
{
if (mSpace[i] != myarr.mSpace[i])
{
flag = false;
break;
}
}
return flag;
}
//!=操作符重载
bool operator!=(MyArray &myarr){
bool flag = false;
if (mLength == myarr.mLength)
{
for (int i = ; i < mLength; i++)
{
if (mSpace[i] != myarr.mSpace[i])
{
flag = true;
break;
}
}
}
else{
flag = true;
}
return flag;
} }; void ProtectA(){
MyArray arr();
arr.PrintfA();
//arr[10]; arr[10]=2;
//根据需求推理出参数列表是Int 返回值是int &
//int & arr.operator[](int num)
arr[]=;
arr.PrintfA();
//arr1=arr; 赋值操作
//分析可知:函数名operator=() ;操作数 2个(不涉及系统类库)arr.operator=(MyArray &arr1)
//因为存在 arr1=arr2=arr3; 所以返回值MyArray & ;结果:MyArray & operator=(MyArray &arr1)
MyArray arr2();
arr2[] = ;
arr2[] = ;
arr2[] = ;
arr2[] = ;
arr2[] = ;
arr = arr2;
arr.PrintfA(); } void ProtectB(){
//arr1==arr; 判断是否相等
//分析 :函数名 operator==(), 有2个操作数 arr1.operator==(arr) 返回值:判断是否相等 那么肯定返回bool值
//结果:bool operator==(MyArray &myarr)
MyArray arr1(), arr2();
if (arr1 == arr2)
{
cout << "这两个数组相等" << endl;
}
else{
cout << "这两个数组不相等" << endl;
}
if (arr1 != arr2)
{
cout << "这两个数不组相等" << endl;
}
else{
cout << "这两个数组相等" << endl;
}
} void main(){
ProtectB();
system("pause");
}

C++ 运算符重载四(自定义数组类)的更多相关文章

  1. python3.4中自定义数组类(即重写数组类)

    '''自定义数组类,实现数组中数字之间的四则运算,内积运算,大小比较,数组元素访问修改及成员测试等功能''' class MyArray: '''保证输入值为数字元素(整型,浮点型,复数)''' de ...

  2. c++-变量,this指针,全局函数,成员函数,自定义数组类

    区分变量属于哪个对象 c++对象管理模型初探 C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效 C++编译器对普通成员函数的内部处理(隐藏this指针) this指针解决函数形参和 ...

  3. C++基础 (9) 第九天 编译器对模板类的二次编译 类模板 自定义数组类

    1 昨日回顾 2 编译器对于模板的二次编译 写一个模板函数 然后进行调用 g++ template.cpp -o template // 汇编 g++ -S template.cpp –o templ ...

  4. python学习笔记四 (运算符重载和命名空间、类)

    从以上代码中应该了解到: obj.attribute  查找的顺序: 从对象,类组成的树中,从下到上,从左到右到查找最近到attribute属性值,因为rec中存在name的属性,所以x.name可以 ...

  5. c++-重载等号,数组,指针,字符串类

    重载 重载=操作符 1先释放旧对象资源 2用一个对象=给另外一个对象 3函数返回值当左值 返回一个引用 4 数组类 Array& operator=(Array& a1); 5 字符串 ...

  6. C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)

    运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...

  7. YTU 2617: B C++时间类的运算符重载

    2617: B C++时间类的运算符重载 时间限制: 1 Sec  内存限制: 128 MB 提交: 284  解决: 108 题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为 ...

  8. C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...

  9. 问题 C: B C++时间类的运算符重载

    题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符“+”,使之能用于时间对象的加法运算:重载运算符 ...

随机推荐

  1. 初识 NoSQL Databases RethinkDB

    初识 NoSQL Databases RethinkDB rethinkDB所有数据都是基于 json的Document; 官网:http://rethinkdb.com/ github: https ...

  2. Linux回环接口(loop-back/loopback)

    回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...

  3. SVN 快速入门!

    输入账户密码即可!

  4. windows C:\documents and settings拒绝访问

      windows C:\documents and settings拒绝访问 CreationTime--2018年7月26日09点16分 Author:Marydon 1.情景再现 win+r-- ...

  5. java的重写、重载、覆盖的差别

    多态性  通过继承,一个类能够用作多种类型:能够用作它自己的类型.不论什么基类型,或者在实现接口时用作不论什么接口类型.这称为多态性  重载  每一个类型成员都有一个唯一的签名.方法签名由方法名称和一 ...

  6. PHP-密码学算法及其应用-对称密码算法

    转自:http://www.smatrix.org/bbs/simple/index.php?t5662.html ////////////////////////////////////////// ...

  7. 虚拟机运行Linux提示【此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。】的问题

    虚拟机运行Linux提示[此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态.]的问题 换了台新笔记本,安装了虚拟机,导入以前的Linux系统镜像,出问题了. 提示以下错误信息: ...

  8. C#指南,重温基础,展望远方!(11)C#委托

    委托类型表示对具有特定参数列表和返回类型的方法的引用. 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体. 委托类似于其他一些语言中的函数指针概念,但与函数指针不同的是,委托不仅面向对象,还 ...

  9. CSC时无法找到C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib

    偶然用到CSC编译c#程序,出现如下问题: warning CS1668: “LIB 环境变量”中指定的搜索路径“C:\Program Files\Microsoft        SDKs\Wind ...

  10. xaf 修改主页logo

    https://documentation.devexpress.com/#Xaf/CustomDocument3156