• 締切済み

VC++のデータとクラス

C++/CLIで、 クラス名をTestResultにして TestResult(char name,int student_ID,int Language_result,int Mass_result,English_result)の形でメンバ関数を定義して データ入れて data[0]=TestResult(小林,001,65,75,66); data[1]=TestResult(高橋,002,84,97,91); data[2]=TestResult(加藤,003,43,55,71); data[3]=TestResult(田中,004,76,68,81); のようにしてインスタンス化して、他のクラスからdata[1].Language_result のように参照したいのです。 このようになるヘッダーファイル(.h)とソースファイル(.cpp)を教えてください。 c++の理解が浅く、的を得ない質問かと思いますが、お答えお願いします。

みんなの回答

  • kabe64
  • ベストアンサー率72% (13/18)
回答No.1

コピーコンストラクタがあるだけのクラスでできますよ。 #include <string> class TestResult { public: TestResult(void); TestResult( std::string name, int student_ID, int Language_result, int Mass_result , int English_result ) { this->name = name; this->student_ID = student_ID; this->Language_result = Language_result; this->Mass_result = Mass_result; this->English_result = English_result; } ~TestResult(void); public: std::string name; int student_ID; int Language_result; int Mass_result; int English_result; }; 以下のようにアクセスできます。 TestResult data[4]; data[0]=TestResult("小林",001,65,75,66); data[1]=TestResult("高橋",002,84,97,91); data[2]=TestResult("加藤",003,43,55,71); data[3]=TestResult("田中",004,76,68,81); for(int i=0; i<4; i++) { printf("%s, %03d, %d, %d, %d\n", data[i].name.c_str(), data[i].student_ID, data[i].Language_result, data[i].Mass_result, data[i].English_result); }

marsha110
質問者

お礼

回答ありがとうございます。 自分でも、良い方法を探して、この方法でも書いてみようかと思います。

関連するQ&A

  • VC++6.0でテンプレートクラスを用いたいのですがエラーが出ます

    'CImageTemplate' : 指定の指定のテンプレート クラスはすでに定義されています と言われてしまいます. まだC++の知識が浅いのですが間違っている箇所がわかれば教えてください. ---------テンプレートのヘッダ(ImageTemplate.h)--------- template <class TempData> class CImageTemplate{ private:   TempData **Data;//データ本体   … protected:   …   InitData(int h, int w); }; ---------テンプレートのcpp(ImageTemplate.cpp)--------- #include "stdafx.h" #include "ImageTemplate.h" template<class TempData>CImageTemplate<TempData>::InitData(int h, int w) {…} ---------呼び出し側のヘッダ(ImageLabel.h)--------- #include "ImageTemplate.h" class CImageLabel{ private:   CImageTemplate < int > Label;   … }; ---------呼び出し側のcpp(ImageLabel.cpp)--------- #include "stdafx.h" #include "ImageLabel.h" #include "ImageTemplate.h" CImageLabel::InitLabel(int h, int w) { if(!Label.CheckData()){ Label.InitData(h, w); } }

  • VC++ 2010 Expressでのビルド

    VC++2010 Expressを使ってC++を書いているのですが、 今までは、使用するクラスファイルを全てエントリーポインのある int _tmain(int argc, _TCHAR* argv[])の上に記述して使っていたのですが、クラスの数が増えてきたので、エントリーファイルと同階層のソースファイルフォルダの下に置くようにしました。この場合、たとえば下記のメイン部分のように、 基底クラスの読み込み順を考量して、#includeしているのですが、エントリポイントのファイルを「右クリック」->「コンパイル」はエラー無しではけるようになったのですが、 F5キーでデバッグを開始してビルドする多くのエラーをはいてしまいます。 とりあえず、全てのクラスファイルをインクルードした形のエントリポインタのファイルのコンパイルはうまくいっているので、その結果を使ってビルドする方法が分かりかねています。 Expressの使い方の問題だと思うので、御経験のある方、御教示願えたらと思います。 <メイン部分> #include "stdafx.h" #include <iostream> using namespace std; #include "point.cpp" #include "canvas.cpp" #include "shape.cpp" #include "rect.cpp" #include "triangle.cpp" #include "square.cpp" int _tmain(int argc, _TCHAR* argv[]) { Canvas c; Shape *shape[3]; Rect r(5, 5, 20, 10); shape[0] = &r; Triangle t(1, 18, 16, 8); shape[1] = &t; Square s(22, 2, 6); shape[2] = &s; for (int i=0; i<3; i++) shape[i]->draw(&c); c.show(); getchar(); return 0; }

  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。

  • C シャープ クラスについて

    C#のカテゴリが無く、その他(プログラミング)とどちらにしようか迷ったのですがこちらで質問します。 C#初心者です。今クラスについて勉強しているのですが、不思議に思うことがあるので質問します。 以下のコードは使っている教科書に載っているサンプルコードの一部です。 public class Student { //Data members, data fields, or characteristics private int studentNumber; private string studentName; private int score1; private int score2; private int score3; private string major; //default constructor public Student() { } //constructor with one argument public Student(int sID) { studentNumber = sID; } //constructor with two arguments public Student(int sID, string name) { studentNumber = sID; studentName = name; } //constructor with six arguments public Student(int sID, string name, int s1, int s2, int s3, string maj) { studentNumber = sID; studentName = name; score1 = s1; score2 = s2; score3 = s3; major = maj; } (・・・その後もプロパティコードが続く) Constructorにはクラス名と同じ名前を使うと解釈しているのですが、どうやって識別しているのでしょう? 例えば、Main()内で Student thirdStudentObject = new Student(5432, "Randolph Wonder"); と Student aStudentObject = new Student(1234, "Maria Smith", 97, 75, 87, "CS"); というコードがあるのですが、 Student thirdStudentObject = new Student(5432, "Randolph Wonder"); は public Student(int sID, string name) { studentNumber = sID; studentName = name; }、 Student aStudentObject = new Student(1234, "Maria Smith", 97, 75, 87, "CS"); は public Student(int sID, string name, int s1, int s2, int s3, string maj) { studentNumber = sID; studentName = name; score1 = s1; score2 = s2; score3 = s3; major = maj; } を呼び出しているのですよね? 上記の文では必要なアーギュメントが2個と6個なので数の違いからどのConstructorを使っているのかなんとなく分かりますが、もしも public Student(int sID, string name) { studentNumber = sID; studentName = name; } と public Student(int sID, string SchoolName) { studentNumber = sID; studentName = SchoolName; } などのように同じアーギュメント数もしくは同じデータタイプの場合、どうやって「どのConstructorを使うか」を識別させるのでしょうか? 同一クラス内に同じ数のアーギュメントを求めるものは作ってはいけなかったりするのでしょうか? 長い上に分かりづらい質問ですみません。

  • javaのクラスの作り方、エラーの原因が不明です

     今晩は、javaの初心者です。宜しく願いします。  下のようなコードを書いたら、「アクセス可能な型 C1 のエンクロージング・インスタンスが ありません。  型 C1 のエンクロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は C1 のインスタンス)。」 とエラーが出ました。  eclipseでは、「C2 c_2 = new C2() ;」の箇所で赤いエラーマークが表示されています。  C1クラスとC2クラスを分けてやると正常に実行されます。  C1クラスの中にC2クラスを作ると文法的にどこがまずいのでしょうか。  あるクラスの中に別のクラスを書いているプログラムを見たような気もするのですが。  C1クラスとC2クラスをわかるのとはJAVA的に何がいけないのでしょうか。  原因がさっぱり分りません、宜しくお願いいたします。 ======================================================================= public class C1 { int a = 9 ; int b = 8 ; int c = 7 ; int d = 6 ; // C2 c_2 ; public void Calc1() { System.out.println("a+b= " + (a+b)) ; } public static void main(String[] args) { C2 c_2 = new C2() ; c_2.Calc2() ; C1 c_1 = new C1() ; c_1.Calc1(); // c_1.Calc2(); } class C2 { // int c = 7 ; // int d = 6 ; public void Calc2() { System.out.println("c-d= " + (c-d)) ; } } } =========================================================================

  • クラスのインスタンスって何者?

    データ用クラスのインスタンスなのですが、以前 「クラス名 利用名;」 で使うと毎回別のインスタンスを呼び出すらしく値が空になるトラブルが起き 「static クラス名 利用名;」 とすれば常に同じインスタンスになるからそれを使いなさいと教えられました。 以後ずっとこれを使ってきたのですが、 ヘッダーファイルAに記述したデータクラスを ソースファイルAで「static クラス名 利用名;」 ソースファイルBで「static クラス名 利用名;」 と利用名を完全に同じにしてもエラーが出ず(ソースのヘッダ領域なのに) ソースファイルAでそのデータクラスに入れたデータは ソースファイルBでは利用できず空になっていました。 極当たり前の何かを私はわかってないから こういうトラブルが起きているんだと思うのですが、 クラスのインスタンスって何者なんでしょうか? どうすれば複数のソースから1つのデータクラスを作り上げ 全体で利用できるように出来るのでしょうか?

  • VC++2010expressのアセンブラについて

    下記の2個のファイルを持つプログラムでインラインアセンブラのcall命令で配列変数の1部が消滅する原因を教えてください。 main.cpp int *disp; int data[2]; WinMain() { _asm mov disp,offset disp_top ・ ・ ・ メッセージループへ _asm{ disp_top: 下記move()からcallされた時、ここの時点でdata[0]の内容が消滅している。data[1]の内容は1のまま存在する。 ・ ・ ・ ret   } } move.cpp extern int *disp; extern int data[2]; void move() { data[0]=1; data[1]=1; _asm{ call disp callから復帰した、ここの時点ではdata[0]の内容は1で復帰している。   } }

  • 内部クラス?のエラー

    内部クラス?のエラー  今晩は、JAVA初心者です、宜しくお願い致します。  下のようなプログラムを書いてやりました。  <A>のように全体のプログラムを1つのクラスの中に別のクラスを入れる(内部クラス?)と、 「アクセス可能な型Testのエンクロージング・インスタンスがありません。  型Testのエンクロージング・インスタンスで割り振りを限定する必要があります。  (例えばx.new A()でxはテストのインスタンス)」というエラーがでます。  しかし、<B>のように別のクラスにすると、エラーは出ません。  この原因がよくわかりません。 ==================================================================== <A> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } } ==================================================================== <B> public class Test { public static void main(String args[]) { Calc ca = new Calc(); ca.calcTest(1,2); } } class Calc { void calcTest(int a , int b ) { int c = a + b ; System.out.print("a + b = " + c); } } ====================================================================

    • ベストアンサー
    • Java
  • C++ テンプレートクラス内のメソッド 警告 意味

    VC++2008 windows7 の環境でC++のプログラミングをしております. 以下の種類の警告がいくつか出てくるのですが,この警告の理由が分かる方いますか? 実行結果には影響は出ていませんが,出来れば消したいと考えています. クラス テンプレート のメンバ関数 void A<T>::TEST(A<T> *,int) のコンパイル中 1> .\main.cpp(69) : コンパイルされたクラスの テンプレート のインスタンス化 1> 'A<T>' の参照を確認してください 1> with 1> [ 1> T=uchar 1> ]

  • .NETクラスライブラリについて

    開発環境は、VC++で、C++/CLIです。 コーディングする時に、他のファイルに書いたクラスを使いたい場合、そのクラスのヘッダーファイルをインクリュードしないといけません。 でも、.netのクラスは、インクリュードしないでも使えます。 この違いはなんでしょうか? インクリュードしないで使えるクラスライブラリを作成できるんでしょうか? 何か勘違いしてるような気がします。 わかる方よろしくお願いします。

専門家に質問してみよう