如何在C ++中打印动态数组?

时间:2016-02-15 19:35:34

标签: c++ dynamic-arrays

以下是我最新作业的当前代码,我无法弄清楚打印数组的问题是什么。请原谅我糟糕的代码,在我的课堂上我们被扔进了C ++,我们之前没有人曾经使用它,所以这可能是一个简单的错误,但是家里没有人可以帮助我。

标题文件DynamicArray.h

//
// DynamicArray.h

///#include <rpcndr.h>

#ifndef DYNAMIC_DYNAMICARRAY_H
#define DYNAMIC_DYNAMICARRAY_H

#endif //DYNAMIC_DYNAMICARRAY_H

//      union
//      intersection
//      relative complement
//      insertion - if the element is already in the set, then nothing happens
//      deletion - if the element is not in the set, then nothing happens
//      query to check whether an element is in a set
//      query to find the number of number of elements in a set
//      display the set
//destructor
//       copy constructor
// ***********************************overloading assignment operator***************************************************
class DynamicArray{
public:
    DynamicArray(int size);
    DynamicArray(const DynamicArray &original, int Size);
///     DynamicArray(int Size);
    ~DynamicArray();

    void Union();
    void Intersection();
    void Complement();
    int Insert(int position, int entry, int size);
    int Delete(int position, int entry, int size);
    bool Qelement(int size, int entry);
    int Qset(int size);


    int size = 20;
    int *array;
};

    //
// 
//

源文件DynamicA.cpp - 这里我定义了构造函数和成员函数:

//
// DynamicA.cpp
//

//Union();
//Intersection();
//Complement();
//Insert();
//Delete();
//Qelement();
//Qset();
#include <iostream>
#include "DynamicArray.h"
using namespace std;

DynamicArray::DynamicArray(int &size = 30){
    size = 20;
    *array = new int[size];
    for(int i = 0; i < size; i++){
        array[i] = 0;
    };
}

///  DynamicArray::DynamicArray(int Size) {
///
///    }

DynamicArray::DynamicArray(const DynamicArray &original, int size) {
    size  = original.size;
    array = new int[size];
    for (int i = 0; i < size; i++) {
        array[i] = original.array[i];
    }
}

DynamicArray::~DynamicArray(){
    delete[] array;
}

void DynamicArray::Union(){

}

void DynamicArray::Intersection() {

}

void DynamicArray::Complement(){

}

int DynamicArray::Insert(int position, int entry, int size) {
    if(!Qelement()){
        for(int i = size+1; i > position+1; i--){
            array[i] = array[i-1];
        }
        array[position] = entry;
    }
}

int DynamicArray::Delete(int position, int entry, int size){
    for(int i = 0; i < size; i++){
        if(array[i] == entry) {
            for(int x = i; x < size; i++){
                array[x] = array[x+1];
            }
            size--;
        }
    }
}

bool DynamicArray::Qelement(int size, int entry) {
    for(int i = 0; i < size; i++){
        if(array[i] == entry){
            return true;
        }
    }
}

int DynamicArray::Qset(int size){
    return size;
}

main.cpp - 这是我的问题所在。我继续收到的错误是dArray不是数组。

//main.cpp
    #include <iostream>
//#include <DynamicArray.h>
#include "DynamicArray.h"
//#include "DynamicA.cpp"

//using namespace std;

int main() {
    DynamicArray dArray();
    for(int i = 0; i < array; i++) {
        cout << dArray[i];
    }
}

1 个答案:

答案 0 :(得分:3)

您的类DynamicArray不是数组,编译器正确。它只是一个你定义的课程。要使代码正常工作,您需要重载 DynamicArray::operator[](int),例如:

#include <cassert>
int DynamicArray::operator[](int idx)
{
    assert(idx < size);
    return array[i];
}

原因是operator[]仅为内置数组类型定义,它具有已建立的含义并且由编译器理解。但是你已经定义了一个任意的类,你理解它是一个数组只是你的理解,即一个假设,编译器决不会这样认为,所以说。

现在,在您遇到由此错误导致的问题之前,让我指出这一点:字段sizearray 必须是私有的或至少受到保护!阅读C ++中的 encapsulation ,以及该语言的其他两三个基本原理。您可能想知道如何在给定此更改的情况下从外部访问数组的大小,以及所谓的 getter-setter方法发挥作用的地方。定义int DynamicArray::size() const { return size; }以让数组告诉其客户端的大小。

现在,您可以将先前定义的operator[](int)int size()

一起使用
DynamicArray myArray(5);
for(int i = 0; i < myArray.size(); ++i)
    std::cout << myArray[i] << " ";

其他错误:@ crashmstr指出的两个:*array = new int[size];应该是array = new int[size];DynamicArray myArray();不会构建,因为这会调用未定义的默认构造函数。