2012-03-08 12 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"*** 
} 

ありがとうございます。

class Node 
{ 

public: 
    int size; 
    string* container; 

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

また、デストラクタでメモリを解放することを忘れないでください:

+0

"(悲しいことに私たちはベクトルを使うことはできません)" - そこから逃げる。 – Xeo

+1

@ Xeo:ある時点で、配列 'new'と配列' delete'の使い方を学ぶ必要があります。 STLなしで無力であれば、C++でコーディングする方法を誰かに教えたとは言えません。 – StilesCrisis

+0

@trutheality: 'calloc'はここでは役に立たないでしょう。 – StilesCrisis

答えて

1

あなたは、動的に割り当てられた配列を必要としています。

+0

そして[3つのルール](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)を忘れないでください。 – Xeo

-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に代入していますか? –

+0

NULLをチェックしてみませんか?彼が後でコンストラクタを追加するためにコードを変更し、リストを初期化しない場合はどうなりますか?割り当てが失敗した場合はどうなりますか? –

+0

割り当てに失敗すると、例外が発生し、オブジェクトが構築されないため、デストラクタが呼び出されません。 (私が今夜の記憶がひどいことをしていない限り....)心配すべきことは、実際には割り振り*が成功する*ですが、例外はコンストラクターの後で発生します。 – Hurkyl

0

私はポインタを使用します。サイズを取得すると、そのサイズで新しいものを呼び出すだけです。

char* myArray; 

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

デストラクタでもdeleteを呼び出す必要があります。

+0

これは完全に機能しました。どうもありがとうございます! – user1185736

関連する問題