2

私はプログラミングにかなり慣れていないので、先生は私たちに独自のベクトル クラスを作成するように指示しました。すべてが必要に応じて機能しますが、底を打ってprintV関数を使用しようとすると、ベクトルのサイズを保持するのではなく、関数のサイズが非常に大きくなります。以下のすべてのコードを含めます。

using namespace std;
class MyVector
{
private:
    int vectorSize;
    int maxCapacity;
    int *myArray;
public:
    //default constructor
    //purpose: Initializes all variables
    MyVector(void);
    //Parameterized Constructor
    //Purpose: creates a vector of capacity n
    //parameters: int
    MyVector(int);
    //destructor
    //Purpose: deletes and dynamically allocated storage
    ~MyVector(void);
    // Overloaded assignment operator
    // Purpose: to do assignment from one vector to another
    // Parameters: a MyVector object
    // Returns: A MyVector object
    MyVector operator + (MyVector&);
    // Copy constructor
    // Purpose: Copy the data into this vector
    // Parameters: a MyVector object
    // Returns: none
    MyVector(const MyVector&);
    //size function
    //purpose: gets the size of the vector
    //returns: size
    int size() const;
    //capacity function
    //purpose: gets the capacity of the vector
    //returns: capacity
    int capacity() const;
    //clear function
    //purpose: deletes all elements from the vector and resets its size to zero and capacity 2
    //returns: nothing
    void clear();
    //push_back function
    //purpose: adds an integer value at the end of the vector
    //returns: nothing
    void push_back(int n);
    //at function
    //purpose: returns the value of the element at position i in the vector
    int at(int) const;
};
ostream& operator<<(ostream&, const MyVector&);

ここにcppファイルがあります

#include "MyVector.h"


MyVector::MyVector(void)
{
    maxCapacity = 2;
    myArray = new int[maxCapacity];
    vectorSize = 0;
}

MyVector::MyVector(int i)
{
    maxCapacity = i;
    myArray = new int[maxCapacity];
    vectorSize = 0;
}

MyVector::~MyVector(void)
{
    if (myArray != NULL);
    {
        delete [] myArray;
        myArray = NULL;
    }
}
MyVector MyVector::operator+(MyVector& rho)
{
    if (this == &rho)
    {
        return *this;
    }
    delete [ ] this->myArray;
    vectorSize = rho.vectorSize;
    this->myArray = new int[maxCapacity];
    for(int i = 0; i < maxCapacity; i++)
    {
        this->myArray[i] = rho.myArray[i];
    }
    return *this;
}
MyVector::MyVector(const MyVector& b)
{
    maxCapacity = b.maxCapacity;
    myArray = new int[maxCapacity];
    for (int i = 0; i < maxCapacity; i++)
    {
        this->myArray[i] = b.myArray[i];
    }
}
int MyVector::size() const
{
    return vectorSize;
}
int MyVector::capacity() const
{
    return maxCapacity;
}
void MyVector::clear()
{
    delete [] myArray;
    maxCapacity = 2;
    myArray = new int[maxCapacity];
    vectorSize = 0;
}
void MyVector::push_back(int add_Element)
{
    if(vectorSize+1>maxCapacity)
    {
        maxCapacity = maxCapacity*2;
        int* tmp = new int[maxCapacity];
        for(int i=0; i <vectorSize; i++)
        {
            tmp[i] = myArray[i];
        }
        delete[] myArray;
        myArray = tmp;
    }

    myArray[vectorSize] = add_Element;
    vectorSize++;
}
int MyVector::at(int i) const
{
    if(i >= vectorSize)
    {
        throw i;
    }
    else
    {
        return myArray[i];
    }
}
ostream& operator<<(ostream& theStream, const MyVector& aVector)
{
    for (int i = 0; i < aVector.size(); i++)
    {
        theStream << aVector.at(i);
    }
    return theStream;
}

もちろんドライバーも。ドライバーを変更できません

#include <iostream>
#include "MyVector.h"     
using namespace std;

// the printV function
// used to test the copy constructor
// parameter: a MyVector object
void printV(MyVector);

int main( )
{
    cout << "\nCreating a vector Sam of size 4.";
    MyVector sam( 4 );

    cout << "\nPush 12 values into the vector.";
    for (int i = 0; i < 12; i++)
        sam.push_back(i);

    cout << "\nHere is sam: ";
    cout << sam;
    cout << "\n---------------\n";

        cout << "\nCreating a vector Joe of size 4.";
    MyVector joe( 4 );
    cout << "\nPush 6 values into the vector.";
    for (int i = 0; i < 6; i++)
        joe.push_back(i * 3);

    cout << "\nHere is joe: ";
    cout << joe;
    cout << "\n---------------\n";

    cout << "\nTest the overloaded assignment operator \"joe = sam\": ";
    joe = sam;

    cout << "\nHere is sam: ";
    cout << sam;
    cout << "\n---------------\n";

    cout << "\nHere is joe: ";
    cout << joe;
    cout << "\n---------------\n";

    // pass a copy of sam by value
    printV(sam);//my problem is here! It changes the array size to a very large number


    cout << endl;
    system("PAUSE");
    return 0;
}

void printV(MyVector v)
{
    cout << "\n--------------------\n";
    cout << "Printing a copy of a vector\n";
    cout << v;
}
4

1 に答える 1

3

私はあなたが欠けていると思います

vectorSize = b.vectorSize;

コピーコンストラクターの行MyVector::MyVector(const MyVector& b)

于 2013-07-19T23:47:14.520 に答える