实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了

Posted cstdio1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;
class ArrayIndexOutOfBoundsException  // 异常类
public:
    int index;
    ArrayIndexOutOfBoundsException(int k)
        index = k;
    
;
class Array
private:
    int *data;
    int size;
    static const int dSize = 10;   // 数组默认大小
public:
    Array( )  // 无参构造
        size = dSize;
        data = new int[size]( );
    
    
        Array(int n )  // 有参构造
        size = n;
        data = new int[size]( );
    
    
    Array(const Array& arr)//拷贝构造函数,深拷贝
    
    if(arr.size>0)    
 	 

		size = arr.size;
        data = new int[size]( );
        for (int i = 0; i < size; i++)
        
            data[i] = arr.data[i];
        
    
  
	
	Array& operator = (const Array& arr)
	
		if(this!=&arr)//如果等号右侧的对象和左边的不是一个对象再赋值(没有这句会运行error),要判断赋值左右对象不相等,坑惨了 
		
		delete []data;//先释放掉之前的内存,否则会内存超限	
	    size = arr.size;
        data = new int[size]( );
        for (int i = 0; i < size; i++)
        
            this->data[i] = arr.data[i];
        
    	
		
		return *this;
	
    
    ~Array() 
    
        if (this->data != NULL)//不为空才释放 
        
            delete []data;
        
       
    
				
		
    int& operator [] (int k)     // 运算符 [ ] 重载,以方便数组的使用
        if(k<0 || k>=size) throw ArrayIndexOutOfBoundsException(k);
        return data[k];
    
    friend ostream& operator << (ostream& o, const Array& a);   // 运算符 << 重载,以方便输出
;
ostream& operator << (ostream& o, const Array& a)
    o << ‘[‘ ;
    for(int i=0; i<a.size-1; i++)
        o << a.data[i] << ‘,‘ ;
    o << a.data[a.size-1] << ‘]‘;
    return o;

// 注意:实际测试程序中,在此处之前的代码与样例中相同
// 注意:实际测试程序中,在此处之后的代码(即main函数)可能与样例中不同
int main()
    int n, k;
    cin >> n >> k;
    Array a(n);  // 构造数组,大小为 n
    for(int i=0; i<n; i++) a[i] = i;
    Array b = a;  // 拷贝构造数组
    b[n/2] = k;
    cout << a << endl;
    cout << b << endl;
    Array c;  // 构造数组,默认大小
    c = a; // 拷贝数组
    c[n/2] = k;
    cout << a << endl;
    cout << c << endl;
    a = a;
    a[n/2] = 2223;
    cout << a << endl;
    return 0;

  

以上是关于实现数组类(C++ 拷贝构造函数拷贝函数)要判断赋值左右对象不相等,坑惨了的主要内容,如果未能解决你的问题,请参考以下文章

C++中怎么拷贝构造函数(格式及相关符号的意识分别是啥)并且拷贝函数的作用是啥

c++面向对象高级编程(上)

c++面向对象高级编程(上)

c++面向对象高级编程(上)

c++关于派生类的拷贝构造函数

C++类拷贝控制 深拷贝 浅拷贝