//自定义数组类
#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. ant design pro (十二)advanced UI 测试

    一.概述 原文地址:https://pro.ant.design/docs/ui-test-cn UI 测试是项目研发流程中的重要一环,有效的测试用例可以梳理业务需求,保证研发的质量和进度,让工程师可 ...

  2. js 函数定义的2种方式

      js 函数定义的2种方式 CreateTime--2018年3月29日18:36:14 Author:Marydon 方式一: /** * 函数式声明 */ function mode() { c ...

  3. oracle 两表关联查询

      oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...

  4. 【BIEE】安装好BIEE后,修改默认登录页面不为QuickStart页面

    已经安装好了BIEE,但是发布了自己的资料库后,默认的登录页面为QuickStart,导致已登录就看到错误页面 现在进行如下修改即可 点击登录身份后的名字,例如我的是weblogic 选择[我的账户] ...

  5. 【Oracle】PL/SQL Developer 快捷键、使用技巧

    1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...

  6. 中文latex参考文献格式

    中文latex参考文献格式 原来英文: \begin{thebibliography}{1} \bibitem{Ben-Shimon2015RecSys} D.~Ben-Shimon, A.~Tsik ...

  7. OAuth2.0官方文档中文翻译

    http://page.renren.com/699032478/note/708597990 (一)背景知识 OAuth 2.0很可能是下一代的“用户验证和授权”标准,目前在国内还没有很靠谱的技术资 ...

  8. 搭建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例(转)

    一个文档包含了安装.增量备份.扩展.api调用示例,省去了查找大量文章的时间. 搭建coreseek(sphinx+mmseg3)安装 [第一步] 先安装mmseg3 cd /var/install ...

  9. Windows2008 R2下,应用程序池 'XXXXXXXX' 被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。

    转:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.html http://www.hack001.com/post/151

  10. 线程池c3p0和dbcp2的配置初始化实例

    一.c3p0 public class ConnectionManager { public static ComboPooledDataSource dataSource; static { try ...