关于数组的封装不知道为什么错了,具体代码如下

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;
}

  

时间: 2024-10-14 00:48:30

关于数组的封装不知道为什么错了,具体代码如下的相关文章

HDU Today(自己的代码不知道哪里错了一直没A抄袭大神的)

http://acm.hdu.edu.cn/showproblem.php?pid=2112 本题题目意思非常简单,麻烦的就是处理一下字符串,这是我能力欠缺的地方 #include<stdio.h>#include<iostream>#include<string.h>#define maxint 200000000int map[201][201],visit[201],n,m,s,e;int dis[202];char name[201][32];int find(

编程算法 - 数组中出现次数超过一半的数字 代码(C)

数组中出现次数超过一半的数字 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 数组中有一个数字出现的次数超过数组长度的一半, 请找出这个数字. 1. 使用高速排序(QuickSort)的方法, 把中值(middle)和索引(index)匹配, 输出中值, 并检測是否符合要求. 2. 使用计数方法依次比較. 代码:  方法1: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */

一个关于传参数js数组的封装方法(寄生模式)

function createArr(){ var arr = new Array(); arr.push.apply(arr,arguments); arr.toJoin = function(){ return this.join(","); } arr.toSlice = function(start,end){//start num //end num return Array.prototype.slice.call(this,start,end+1) } return ar

LeetCode() Basic Calculator 不知道哪里错了

class Solution {public:    int calculate(string s) {        stack<int> num;        stack<char> symbol;        for(int i=0;i<s.length();i++){            if(s[i]==' ')   continue;            else if(s[i]=='('||s[i]=='+'||s[i]=='-')  symbol.pu

解决那道不知道怎么错了的题————Conversions

大家是否还记得我在前面发表过的一篇文章,就是一道题,觉得很简单,但是自己运行的都对,提交就不对,我终于知道是怎么回事了,让我来告诉你们真相吧.原来是题目有点问题,数据有点问题,说白了,就是输入N之后,不是接着跟N组数据,而是大于或者小于或者等于,是不是......再看一下我提交后的正确的代码吧 <span style="font-size:18px;"><strong>#include<stdio.h> #include<string.h>

用递归实现归并排序(不会呀 不知道哪里错了)

#include<iostream> using namespace std; #include<vector> #include "Vector.h" void merge(int num[], int tem[], int lo, int hi); //归并排序 void mergesort(int num[],int tem[], int lo, int hi) { //int *tem01; if (hi - lo == 0 ) tem[lo] = nu

头部布局,搜索验证和AJAX自动搜索提示,并封装成组件,提高代码复用性

index.html 头部区结构和样式 效果图 静态样式 index.html中的部分 <!-- 头部 --> <div class="header"> <div class="container"> <!-- h1标签是为了搜索引擎优化,表示重要 但是页面内不要出现太多 --> <h1 class="fl"><a href="#" class="he

一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码

一般来说,系统框架的主内容区会引入另一个独立的 Web 页面来实现系统的功能,所以在在 Tabs 里的每一个标签页里使用 iframe 标签来引入子页面.所以这里可以将 Tabs 的 Content 属性值设为一个 <iframe> 标签即可.比如: $("#tabs").tabs('add',{ title: "百度搜索", content: '<iframe style="width:100%;height:100%;" s

Java中的数组操作进阶,别问我为什么,代码诠释一切!

我不是针对某个人,我说的是在座的所有人都是渣渣! package com.mi.array; import java.util.Arrays; /** * System.arraycopy(i, 0, j, 0, i.length);这种复制会覆盖目标数组元素 * 数组的copy * @author admin * */ public class CopyArray { public static void main(String[] args) { int[] i =new int[7]; i