C++ 运算符重载四(自定义数组类)
//自定义数组类
#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++ 运算符重载四(自定义数组类)的更多相关文章
- python3.4中自定义数组类(即重写数组类)
'''自定义数组类,实现数组中数字之间的四则运算,内积运算,大小比较,数组元素访问修改及成员测试等功能''' class MyArray: '''保证输入值为数字元素(整型,浮点型,复数)''' de ...
- c++-变量,this指针,全局函数,成员函数,自定义数组类
区分变量属于哪个对象 c++对象管理模型初探 C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效 C++编译器对普通成员函数的内部处理(隐藏this指针) this指针解决函数形参和 ...
- C++基础 (9) 第九天 编译器对模板类的二次编译 类模板 自定义数组类
1 昨日回顾 2 编译器对于模板的二次编译 写一个模板函数 然后进行调用 g++ template.cpp -o template // 汇编 g++ -S template.cpp –o templ ...
- python学习笔记四 (运算符重载和命名空间、类)
从以上代码中应该了解到: obj.attribute 查找的顺序: 从对象,类组成的树中,从下到上,从左到右到查找最近到attribute属性值,因为rec中存在name的属性,所以x.name可以 ...
- c++-重载等号,数组,指针,字符串类
重载 重载=操作符 1先释放旧对象资源 2用一个对象=给另外一个对象 3函数返回值当左值 返回一个引用 4 数组类 Array& operator=(Array& a1); 5 字符串 ...
- C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)
运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...
- YTU 2617: B C++时间类的运算符重载
2617: B C++时间类的运算符重载 时间限制: 1 Sec 内存限制: 128 MB 提交: 284 解决: 108 题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为 ...
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
- 问题 C: B C++时间类的运算符重载
题目描述 C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符“+”,使之能用于时间对象的加法运算:重载运算符 ...
随机推荐
- Eclipse与Android源码中ProGuard工具的使用(代码混淆)
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- D3js-对柱状图的增,删,排序
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- 转:TCP/IP协议选项——TCP_KEEPALIVE .
[+] KEEPALIVE作用 KEEPALIVE代码示例 KEEPALIVE脚本设置 1.KEEPALIVE作用 KEEPALIVE机制,是TCP协议规定的TCP层(非应用层业务代码实现的)检测 ...
- IDEA使用及优化
1.修改IntelliJ IDEA\bin\idea64.exe.vmoptions文件的内容 2.Setting配置 2.1 设置主题 2.2 设置编辑区主题 如果想要更多的主题效果的话,可以到如下 ...
- ubuntu13.04如何修改保存屏幕亮度
ubuntu13.04如何修改保存屏幕亮度 入手ubuntu两月有余,最初只是想装个ubuntu学习下linux,然后搞了个win7和ubuntu的双系统,最后干脆将win7干掉了,直接让ubu ...
- 【LeetCode】76. Minimum Window Substring
Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...
- HttpSolrServer 实例管理参考,来自org.eclipse.smila.solr
http://dev.eclipse.org/svnroot/rt/org.eclipse.smila/trunk/core/org.eclipse.smila.solr/code/为什么要对实例管理 ...
- 推荐10款最常用的Android开发工具
我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序 ...
- 【转载】IIS6、IIS7、IIS7.5设置拒绝一组计算机(IP段)访问网站的方法
IIS6设置方法: 1.打开IIS管理器,右键点击网站,选择“属性” 2.把标签切换到“目录安全性”,点击“IP地址和域名限制”的编辑按钮,如下图: IP地址和域名限制 3.选择“授权访问”,然后点击 ...
- EMQ 注意事项
ClientID 唯一:否则后连接的会将前面的踢下去 发送的消息内容太长(payload),导致客户端断线,原因是EMQ默认的消息长度是64K(65536字节),一旦超过就会出问题.可能出现场景: 日 ...