二阶构造 操作符[]重载

Posted dxgg-bond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二阶构造 操作符[]重载相关的知识,希望对你有一定的参考价值。

#ifndef _INTARRAY_H_
#define _INTARRAY_H_
class IntArray{
private:
int m_length;
int* m_pointer;
IntArray(int len);
IntArray(const IntArray& obj);
bool construct();//作用:数组申请内存、赋初值
public:
static IntArray*NewInstance(int length);//创建对象函数,加static的作用??
bool get(int index,int&value);
bool set(int index,int value);
int& operator[](int index);//操作符重载函数
int length();//老是忘记获取数组长度的函数
IntArray& self();//返回自身的成员函数
~IntArray();
};
#endif

//IntArray.cpp

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 }

 

//main.cpp

#include<iostream>
#include<string>
#include"IntArray.h"
#include<stdio.h>
using namespace std;
int main(){
//IntArray a[5]; X
IntArray*a = IntArray::NewInstance(5);
if(a != NULL){
//给a所指向堆空间的对象起别名这样可以避免在C++中指针的使用,秒啊~
IntArray& array = a->self();
cout << array.length() << endl;
for(int i=0;i < array.length();i++){
cout << array[i] << endl;
}
}//注意array对象的作用域范围,傻x!!
delete a;
return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于二阶构造 操作符[]重载的主要内容,如果未能解决你的问题,请参考以下文章

C++类与对象第二篇:(构造函数析构函数拷贝构造运算符重载取地址及const取地址操作符重载)

赋值构造函数(重载赋值操作符)(c++常问问题二)

c++ 拷贝构造函数与赋值运算符重载函数的区别是

8. 析构构造深拷贝浅拷贝赋值操作符重载

拷贝构造函数 和 赋值操作符重载

C++初阶第五篇——类和对象(中)(构造函数+析构函数+拷贝构造函数+赋值操作符重载)