如何在我的主程序c ++中使用我自己制作的Array头文件?

时间:2013-02-01 11:09:35

标签: c++ arrays header

我创建了自己的头文件,这就是我们被要求这样做的方法,但是我应该在主程序中使用哪些参数来调用这个头文件并创建一个数组。

我的头文件如下所示:

#ifndef ARRAY_H
#define ARRAY_H

class Array {
public:

    Array(int size) : _size(0), _arr(0) {
        // Call resize to initialize oneself
        resize(size) ;
    }

    Array(const Array& other) : _size(other._size) {
        _arr = new double[other._size] ;

        // Copy elements
        for (int i=0 ; i<_size ; i++) {
            _arr[i] = other._arr[i] ;
        }
    }

    ~Array() {
        delete[] _arr ;
    }

    Array& operator=(const Array& other)
    {
        if (&other==this) return *this ;
        if (_size != other._size) {
            resize(other._size) ;
        }
        for (int i=0 ; i<_size ; i++) {
            _arr[i] = other._arr[i] ;
        }
    }

    double& operator[](int index) {
        return _arr[index] ;
    }
    const double& operator[](int index) const {
        return _arr[index] ;
    }

    int size() const { return _size ; }

    void resize(int newSize) {
        // Allocate new array
        double* newArr = new double[newSize] ;

        // Copy elements
        for (int i=0 ; i<_size ; i++) {
            newArr[i] = _arr[i] ;
        }

        // Delete old array and install new one
        if (_arr) {
            delete[] _arr ;
        }
        _size = newSize ;
        _arr = newArr ;
    }

private:
    int _size ;
    double* _arr ;
} ;

#endif

2 个答案:

答案 0 :(得分:2)

  1. 不要在.h文件中编写方法的实现。在头文件中编写代码时,只有几个例外对齐且你的情况不是一个。您应该将实现移动到项目内的cpp文件中。请仔细阅读:Why have header files and .cpp files in C++?
  2. 如果您想使用.h文件,只需撰写#include "your-h-filename.h"即可。然后,您将能够使用.h文件中定义的已定义的类,变量和函数。
  3. 您可能需要阅读此内容:http://www.learncpp.com/cpp-tutorial/19-header-files/

答案 1 :(得分:1)

在任何要使用此类的.cpp文件中,假设“Array.h”是.cpp文件中头文件的相对路径,请输入以下行:

#include "Array.h"

在文件顶部附近,在任何函数或类型声明之前。这可以确保将数组文件中的代码视为在该.cpp文件中的那一点写入。

另外请注意,您通常希望将类方法的定义拆分为单独的.cpp文件(可能是Array.cpp)。例如,对于resize,头文件中的定义应更改为:

void resize(int newSize);

并且完整定义应该放在.cpp文件中:

void Array::resize(int newSize) {
// Allocate new array
double* newArr = new double[newSize] ;

// Copy elements
for (int i=0 ; i<_size ; i++) {
  newArr[i] = _arr[i] ;
}