• ベストアンサー

構造体からクラスを派生させる方法

実は今大学に通っていてC++の授業を取っているのですが、この間構造体からクラスを派生させると言う部分の講義があったんです。ですがその回、都合で欠席してしまい方法が分かりません。周りの学生に聞いてもよく分からず本等で調べても構造体から派生させる所は載っていませんでした。どなたか「構造体からクラスを派生させる方法」を知っていたら教えて下さい(私の予想では基本クラス名を書く所を構造体名にすればいいのだと思うのですが)普通にクラスから派生させる時との違いや注意点等も分かりましたらお願いします。 まだ習い始めたばかりなので幼稚な質問になってしまったかもしれませんがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.3

struct STRUCT { int aaa; int bbb; }; のように記述した場合、aaaおよびbbbはパブリックメンバー(外から自由にアクセス可能)です。 class CLASS { int ccc; int ddd; }; 同じように書いてもクラスの場合はプライベートメンバー(メンバー関数からしかアクセスできない) 派生を行う場合も似たような規則があります 上記STRUCTから派生した場合 struct STRUCT2:STRUCT { int eee; int fff; }; というように構造体を宣言した場合、aaaおよびbbbはパブリックなアクセス権を持ちます class CLASS2:STRUCT { int eee; int fff; }; というようにクラスを宣言した場合、aaaおよびbbbはプライベートなアクセス権を持ちます ただし struct STRUCT2:CLASS { int eee; int fff; }; のように記述してもcccとdddがパブリックにアクセスできるようになるわけではありません ちょっとややこしいけど こんなところです

fines
質問者

お礼

なるほど。分かりました。お手間を取らせてしまい申し訳ありませんでした。 つまり構造体を親にする時には構造体名の前にパブリックをつけなくても構造体のメンバにパブリックにアクセス出来ると言う事ですね^^

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.2

すいません 思いっきり混乱させるような誤変換... 規定値じゃなく既定値、デフォルトが違うだけってことです

fines
質問者

お礼

分かりました。ありがとうございます^^

全文を見る
すると、全ての回答が全文表示されます。
  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.1

> 私の予想では基本クラス名を書く所を構造体名にすればいいのだと思うのですが ピンポン!! C++における構造体と暮らすの違いは、メンバーのアクセス権と派生時のアクセス権の規定値が異なることだけです

fines
質問者

お礼

早速の回答ありがとうございます。とても参考になります。出来ればメンバのアクセス権と派生時のアクセス権の既定値の所をもう少し詳しく知りたいのですが、具体的にどの様に違うのかを。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラスのプロパティに構造体を使いたい。

    VB6+SP5にて開発しております。 「クラス名.構造体名.変数名 = 値」といった感じで構造体をプロパティとして使用できればと考えているのですが、単純に構造体を定義しただけでは駄目なようです。実現は無理なのでしょうか?よろしくお願いします。

  • 派生クラスで,基本クラスのメンバ変数である構造体の型を・・・

    派生クラスで,基本クラスのメンバ変数である構造体の型を戻り値の型とするメンバ関数を作りたいのですがエラーが発生してしまいます. class A{ protected: struct NODE{ char *name; NODE *next; } NODE *node; }; class B : public A{ public: NODE* sort(NODE* fnode); }; NODE* B::sort(NODE* fnode){ ←エラー ~~~~~ return ○○; } 現在このような状態です. よろしくお願いします.

  • クラス内の構造体の実体化とアクセス方法が・・

    クラス内の構造体の実体化とアクセス方法が解らなくて困っていまし。 ヘッダーで class data { public: struct SET_A { int time; char name[24]; }; }; と宣言したクラス内の構造体を使いたくて data::SET_A dataseta; dataseta.time = 1; などとしても構文エラーになってしまいます。 クラス内の構造体はどう実体化してアクセスしたりすれば良いのでしょうか?

  • 構造体がObjectクラスを継承していることについて

    本を読んでいましたら、構造体はObjectクラスを継承している とありました。 実際構造体を定義して使用してみると、 「ToString」メソッドが存在するなどで、継承されているのだな と思うのですが、 構造体はObjectクラスを継承しています という情報はどのように確認すれば良いのでしょうか? 同じようにクラスがどのクラスを継承していますという情報も確認できたら嬉しいです。 Structure ステートメントのヘルプを見ても載っていないように感じました。 確認方法が知りたいです。 もし宜しければ、ご回答お願い致します。

  • Ruby1.9で、グローバル参照可能な(クラス間で参照可能)構造体の2

    Ruby1.9で、グローバル参照可能な(クラス間で参照可能)構造体の2次元配列の定義方法が分かりません。 色々と文献を読んでいますが、 ・構造体や配列をグローバル参照可能にする定義 ・2次元配列の定義の方法 について、見つけきれておりません。 どうか、ご教示の程お願いいたします。 投稿日時 - 2010-08-04 21:49:17

  • __gcクラスから、__nogcクラスの構造体を使おうとするとLNK2020エラーが出ます

    NET 2003 C++ のマネージとアンマネージに関する質問です。 「__gc class」から、「__nogc class」の中に作った、「__nogc struct」構造体を使用しようとすると、「error LNK2020: 未解決のトークン」といったエラーになってしまい、 ビルドができません。 構造体を持つクラスの指定を「__gc class」に指定すると、ビルドが通るようになります。 これはどういった理由なのでしょうか? マネージクラスから、アンマネージクラスの構造体は利用できないのでしょうか? 利用できるように改善する方法がございましたら、お教えいただけますと幸いです。 何卒よろしくお願いします。

  • C++では構造体がメンバ関数をもてることについて

    仕事ではC言語を使っています。7年ぶりくらいにC++を勉強しなおす気になりました。勉強し始めて疑問に思ったことがあります。 C++では構造体もメンバ関数やコンストラクタ、デストラクタをもてるようですが、なぜそのような仕様になったのでしょうか?クラスでできることをわざわざ構造体(や共用体)でも出来る必要性を感じません。(きらいなら使わなければいいだけのことですが。) 学生時代にC++を勉強したとき使っていた本(※)にそのような記述が無かったような気がします。 ※柴田望洋著:プログラミング講義C++、ソフトバンクブックス、1997 なぜそのような仕様になっているのか、経緯や必要性について教えてください。

  • クラスや構造体のarrayを作りたい。

    クラスや構造体のarrayを作りたい。 クラスや構造体のarrayを作りたいのですが、 以下の方法で正しいのでしょうか? ==================================== #include <string> #include <vector> class Test{ public:   std::string sono1;   int sono2;   bool sono3;   //コンストラクタ   Test(std::string tmp_sono1,int tmp_sono2,bool tmp_sono3){     sono1=tmp_sono1;     sono2=tmp_sono2;     sono3=tmp_sono3;   } }; void main(){   std::vector<Test> testObjArray;   testObjArray.push_back(*(new Test("てすと1",1,true)));   testObjArray.push_back(*(new Test("てすと2",2,false))); } ==================================== 質問1: コンストラクタ時、クラス内の変数へ引数の値を渡す時、 上記のようにtmpを作成する以外の方法はありますか? 質問2: push_back時、クラスをインスタンスしてvectorに渡すにはこのような記述であってるのでしょうか? 「testObjArray.push_back(*(new Test("てすと1",1,true)));」 一応問題なく動いているようなのですが心配です。 よろしくお願いします。

  • スレッドセーフな構造体の作り方

    C++でマルチスレッド環境での開発をしています。 構造体のそれぞれのデータを保護したいために、スレッドセーフな構造体を 定義したいと思っているのですが、どのようにすれば一番効率的に排他制御ができるでしょうか? typdedef struct _DATA { int i; double b; char c; } DATA; たとえば、上のような構造体であれば、それぞれの変数をガードしたいと考えています。 構造体をクラスでラップする方法も考えたのですが、今一つピンと来ません。 もし便利なライブラリがあれば、ライブラリ名と使い方などを教えて頂ければ幸いです。 どうぞよろしくお願いします。

  • 構造 他のクラスの構造体を別のクラスで使いたい。

    C#で以下のようにCls1で定義している構造体をCls2の引数に使いたいのですが 定義されていないエラーになります。 Cls2で再定義すると、同じものが2つできて修正するときに困りそうです。 プログラムの構造について、何か良い方法がありましたら教えてください。 namespace A { class Cls1 { public struct Kumi { public string name; public int age; } private test(){ Kumi k; k.name = "太郎"; k.age = 5; Cls2 c2 = new Cls2(); c2.Write(k); } } } 別のクラスファイル namespace A { class Cls2 { public Write(Kumi k){ } } }