zoukankan      html  css  js  c++  java
  • 操作符[]重载

     1 #ifndef _INTARRAY_H_
     2 #define _INTARRAY_H_
     3 class IntArray{
     4 private:
     5   int m_length;
     6   int* m_pointer;
     7   IntArray(int len);
     8   IntArray(const IntArray& obj);
     9   bool construct();//作用:数组申请内存、赋初值
    10 public:
    11   static IntArray* NewInstance(int length);//创建对象函数,加static的作用??
    12   bool get(int index,int&value);
    13   bool set(int index,int value);
    14   int& operator[](int index);//操作符重载函数
    15   int length();//老是忘记获取数组长度的函数
    16   IntArray& self();//返回自身的成员函数
    17   ~IntArray();
    18 };
    19 #endif
    //11行如果不加static报错显示为:

    error: cannot call member function ‘IntArray* IntArray::NewInstance(int)’ without object
    IntArray*a = IntArray::NewInstance(5);
    ^

     
     1 #include"IntArray.h"
     2 IntArray::IntArray(int len){
     3         m_length = len;//通过构造函数给定数组长度
     4 }
     5 //为数组申请空间并赋初值,想下该函数是私有成员的好处;二阶构造函数的第二阶段--申请资源
     6 bool IntArray::construct(){
     7         bool ret = true;
     8         m_pointer = new int[m_length];
     9         if(m_pointer){
    10                 for(int i = 0;i< m_length;i++){
    11                         m_pointer[i] = i;
    12                 }
    13         }else{
    14                 ret = false;
    15         }
    16         return ret;
    17 }
    18 int IntArray::length(){
    19         return m_length;
    20 }
    21 IntArray* IntArray::NewInstance(int length){
    22         IntArray* ret = new IntArray(length);
    23         if(!(ret && ret->construct())){
    24                 delete ret;
    25                 ret = 0;//??????为什么非得是0,NULL就是不行?
    26         }
    27         return ret;
    28 }
    29 bool IntArray::get(int index,int&value){
    30       //和数组下标index相关的都要注意下标判断的越界问题
    31         bool ret = (0<=index && index < length());
    32         if(ret){
    33                 value = m_pointer[index];
    34         }
    35         return ret;
    36 }
    37 bool IntArray::set(int index,int value){
    38         bool ret = ((0 <=  index)&&(index < length()));
    39         if(ret){
    40                 m_pointer[index] = value;
    41         }
    42         return ret;
    43 }
    44 int& IntArray::operator[](int index){
    45         return m_pointer[index];
    46 }
    47 IntArray& IntArray::self(){
    48         return *this;//返回当前数组对象
    49 }
    50 IntArray::~IntArray(){
    51         delete[]m_pointer;
    52 }
     1 #include<iostream>
     2 #include<string>
     3 #include"IntArray.h"
     4 #include<stdio.h>
     5 using namespace std;
     6 int main(){
     7         //IntArray a[5];   X
     8         IntArray*a = IntArray::NewInstance(5);
     9         if(a != NULL){
    10                 //给a所指向堆空间的对象起别名这样可以避免在C++中指针的使用,秒啊~
    11                 IntArray& array = a->self();
    12                 cout << array.length() << endl;
    13         for(int i=0;i < array.length();i++){
    14                 cout << array[i] << endl;
    15                 }
    16         }//注意array对象的作用域范围,傻x!!
    17         delete a;
    18         return 0;
    }



  • 相关阅读:
    「JOISC 2020 Day3」收获
    $ ext{Min25}$筛
    [做题记录-图论] [NEERC2017]Journey from Petersburg to Moscow [关于处理路径前$k$大的一种方法]
    [复习笔记]一些有意思的解法技巧 (转 Dpair
    [比赛记录] CSP2021-S 题解
    [转]C++学习心得
    Sigmoid function in NN
    Kernel Regression from Nando's Deep Learning lecture 5
    Python codes
    php中mail()改用msmtp发送邮件
  • 原文地址:https://www.cnblogs.com/DXGG-Bond/p/11871304.html
Copyright © 2011-2022 走看看