2012-03-08 179 views
1

我正在爲一所學校的項目工作,我已經打了一個死衚衕。項目的一部分要求我們有一個使用數組的類。我們必須使用一個數組(可悲的是我們不能使用矢量)。我想弄清楚如何在運行時在類中構造一個數組。我不需要在最初放入任何東西,我只需要構造函數就可以使數組達到一定的大小。任何反饋或幫助非常感謝。這是我迄今爲止的類和構造函數。這個項目正在用C++完成。課堂構造和陣列

#pragma once 
#include <iostream> 
#include <string> 
using namespace std; 

class Node 
{ 

public: 
    int size; 
    string container[]; 

    Node (int s, string c[]); 
}; 

Node::Node (int s, string c[]) 
{ 
    size=s; 
     ***I need something here that will give string container[] the size of "size"*** 
} 

在此先感謝您。

+0

「(可惜我們不能使用矢量)」 - 從那裏逃跑。 – Xeo 2012-03-08 23:28:18

+1

@Xeo:他們需要學習如何使用array new和array delete。如果沒有STL,他們是無奈的,你不能說你教過某人如何用C++編寫代碼。 – StilesCrisis 2012-03-08 23:32:24

+0

@trutheality:'calloc'在這裏沒有幫助。 – StilesCrisis 2012-03-08 23:32:56

回答

1

你需要一個動態分配的數組:

class Node 
{ 

public: 
    int size; 
    string* container; 

    Node (int s, string c[]) 
    { 
     container = new string[s]; 
     //copy c to container 
    } 
    ~Node() 
    { 
     delete[] container; 
    } 
}; 

另外,記得要釋放在析構函數的內存。

+0

並且不要忘記[Rule of Three](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree)。 – Xeo 2012-03-08 23:35:34

-1
class Node 
{ 

public: 
    int size; 
    string* container; 

    Node (int s, string c[]); 
    ~Node() { if (container != NULL) delete [] container; } 
}; 

Node::Node (int s, string c[]) : container(NULL) 
{ 
    size=s; 
    container = new string[size]; 
    // Copy list values into container 
} 
+0

爲什麼'if(container!= NULL)'?爲什麼你在初始化列表中將'container'分配給NULL? – 2012-03-08 23:32:23

+0

爲什麼不檢查NULL?如果稍後更改代碼以添加構造函數並且不初始化列表,該怎麼辦?如果分配失敗怎麼辦? – 2012-03-09 00:19:09

+0

如果分配失敗,會引發異常,並且該對象不會構造,因此析構函數不會被調用。 (除非我今晚有可怕的內存失效....)實際上,擔心的是分配*成功*,但在構造函數中稍後會產生異常。 – Hurkyl 2012-03-09 01:02:08

0

我會使用一個指針。當你得到的尺寸只需調用新的尺寸。

char* myArray; 

constructor(int size) { 
    myArray = new char[size]; 
} 

您還必須在析構函數中調用delete。

+0

這工作完美。非常感謝! – user1185736 2012-03-08 23:58:00