zoukankan      html  css  js  c++  java
  • 关于数组的封装不知道为什么错了,具体代码如下

    main.cpp
    
    
    #include<iostream>
    #include"Myarray.h"
    //实现数组的封装
    using namespace std;
    
    int main()
    {
    	Myarray  a;
    	for(int i=0;i<a.length();i++)
    	{
    		a.setData(i,i);
    	}
    	for(int i=0;i<a.length();i++)
    	{
    		cout << a.getData(i)<<endl;
    	}
    
    	Myarray a2=a;//调用赋值构造函数
    
    	for(int i=0;i<a.length();i++)
    	{
    		a2.setData(i,i);
    	}
    	for(int i=0;i<a.length();i++)
    	{
    		cout << a2.getData(i)<<endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

      

    Myarray.h
    
    
    #pragma once
    class Myarray
    {
    public:
    	Myarray();
    	Myarray(const Myarray & obj);
    	~Myarray();
    public:
    	void setData(int index,int value);
    	int  getData(int index);
    	int length();
    private:
    	int *m_date;
    	int m_index;
    protected:
    
    
    };
    

      

    Myarray.cpp
    
    
    #include "Myarray.h"
    
    Myarray::Myarray()
    {
    
    }
    Myarray::Myarray(const Myarray & obj)
    {
    	this->m_index=obj.m_index;
    	this->m_date=new int [m_index];
    
    }
    Myarray::~Myarray()
    {
    
    }
    
    void Myarray::setData(int index,int value)
    {
    	m_index=index;
    	m_date[m_index]=value;
    }
    int  Myarray::getData(int index)
    {
    	return m_date[index];
    }
    int Myarray::length()
    {
    
    	return m_index;
    }
    

      代码的运行结果就是空,我不晓得什么原因

    其实应该这个样子。

    Array1.h
    
    #pragma once
    class Array1
    {
    public:
    	Array1(int length);
    	Array1(const Array1 &obj);
    	~Array1();
    public:
    	void setData(int index,int value);
    	int getData(int index);
    	int length();
    public:
    	int m_index;
    	int *m_data;
    };
    
    
    
    Array1.cpp
    
    #include "Array1.h"
    #include<iostream>
    
    Array1::Array1(int length)//构造函数,对数组进行初始化
    {
    	m_index=length;
    	m_data=new int[m_index];//没有这句就是错的,为什么呢
    	// 因为这句的作用是开辟内存空间,用一个函数的时候必须提前开辟好内存空间。
    }
    
    //Array1 a2=a1; 这里就要把a1的所有赋值到a2
    Array1::Array1(const Array1 &obj)
    {
    	this->m_index=obj.m_index;//this就是代表a2 的。obj就是a1
    	this->m_data=new int [this->m_index];//给a2也开辟了等量的内存空间,但是接下来还得赋值,
    	for(int i=0;i<this->m_index;i++)
    	{
    		this->m_data[i]=obj.m_data[i];
    	}
    
    
    }
    Array1::~Array1()//析构函数
    {
    	
    }
    void Array1::setData(int index,int value)//设置参数
    {
    	//m_index = index;//这句话的作用是什么?这句话直接影响着主函数里面for循环的a1.length(),所以导致错误
    	m_data[index]=value;
    }
    int Array1::getData(int index)//得到参数
    {
    	return m_data[index];
    }
    int Array1::length()//数组的长度
    {
    	return m_index;
    }
    
    
    mainclass.cpp
    
    #include<iostream>
    
    #include"Array1.h"
    
    using namespace std;
     
    int main()
    {
    	Array1 a1(10);
    	for(int i=0;i<a1.length();i++)
    	{
    		a1.setData(i,i);
    	}
    	for(int i=0;i<a1.length();i++)
    	{
    		cout<<a1.getData(i)<<"  ";
    	}
    	cout<<endl;
    //这个就要调用赋值构造函数了,里面有动态变量(指针),就设计深拷贝和浅拷贝了,所以必须自己定义拷贝函数。
    	Array1 a2=a1; 
    	for(int i=0;i<a2.length();i++)
    	{
    		a2.setData(i,i);
    	}
    	for(int i=0;i<a2.length();i++)
    	{
    		cout<<a2.getData(i)<<"  ";
    	}
    	cout<<endl;
    
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    C#.Net Winform 应用程序莫名其妙崩溃。
    不小心点击安装了搜狗手机助手,顿时有一种草搜狗全体人员的感觉。
    家乐福张江店班车时刻表
    为什么学习设计模式
    同一端口如何区分不同的Socket
    用命令行CMD .bat 相关操作 如: 创建快捷方式 复制文件等
    C++ 时间获取和时间测量
    get all ODBC drivers 驱动
    命令行 编译C#.NET项目
    如何打开.hlp文件指定的topic
  • 原文地址:https://www.cnblogs.com/xiaochige/p/6579725.html
Copyright © 2011-2022 走看看