2

C++プログラミングは初めてですが、Javaでプログラミングを行ったことがあるため、OOプログラミングはまったく初めてではありません。

私がやろうとしているのは、構造を作成してから、その構造のオブジェクトの配列を作成することです。私はその配列を常にソートし続けようとしています(初心者のソートを使用)ので、構造を定義してから、その構造の配列[50]を作成し、その構造の変数を支援します。次に、さまざまな変数 (名前、姓、成績など) のすべての新しいエントリを、ヘルパー変数に入れたユーザーから取得します。次に、ユーザーがヘルパー変数にすべてのデータを入力し終わったら、そのオブジェクトを配列内のどの位置に置くべきかを調べます。

これがサンプルコードです。できるだけ単純にしようとしています。

struct student {
    //declaring variables that student should have
};

student students[50];
int numOfStud=0;

while (a=='y' && numofStud<50) { //a=='y' just means user wants to add more students
    student input= new student;
            //adding various data to student     
            //adding input into an array of students using variation of insertion sort algorithm
cout << "want to add more students?";
cin >> a;
}

これをコンパイルしようとすると、でエラーが発生しstudent input= new studentます。だから私は今少し混乱しています。

トピック外: また、たとえば、ここでオブジェクトの別のコピーを作成したり、別のポインター (Java のように) を作成したりするとどうなるかについて質問があるstudents[0]=input;ため、student[0] と入力の両方が同じオブジェクト?

助けてくれてありがとう!

4

2 に答える 2

6

への呼び出しが成功new Tすると、動的に割り当てられたTオブジェクトへのポインターが返されるため、ここstudentへのポインターからインスタンス化しようとしています。student

student input= new student;

あなただけが必要です

student input;

あなたがするとき

students[0]=input;

inputにあるstudentインスタンスに の値を代入していますstudents[0]。したがってstudents[0]、 とinputは異なるオブジェクトになります。

于 2013-05-08T15:32:34.580 に答える
2

キーワードは、ポインタを使用してヒープnewにメモリを割り当てるためのものです。あなただけが必要です

 student input;
 // fill "input" with data
于 2013-05-08T15:33:12.797 に答える