タグ

クラスに関するyowanoのブックマーク (24)

  • クラス・メソッド・定数・変数宣言時に使えそうなものまとめ

    http://tomoyaonishi.hatenablog.jp/entry/2014/07/01/メソッド、クラス、変数、定数宣言時に使えそうRead less

    クラス・メソッド・定数・変数宣言時に使えそうなものまとめ
  • ボックス化 - Wikipedia

    ボックス化(boxing)[1]とは、プログラミング言語において値型をオブジェクト型(参照型)に変換すること。逆に、ボックス化されたオブジェクトを値型に戻すことをボックス化解除(unboxing)[2]と呼ぶ。 Javaや.NET Frameworkなどの環境においては、値型(Javaではプリミティブ型[3]がこれに相当する)と参照型という根的に異なる二種類の型が存在する。参照型のインスタンスはヒープ上の独立した領域に確保される。値型は文脈によって確保される場所は異なるものの、いずれにせよメモリ上に連続的に確保される(例えば、ローカル変数として宣言された場合はスタック上に確保され、参照型のメンバとして宣言された場合は参照型の一部として確保される)。 このように値型と参照型とは根的に性質の異なるものであるが、さまざまな理由により、値型を参照型に型変換して運用することが必要となる場合がある

    yowano
    yowano 2014/03/08
    値型を参照型に変更すること。JavaやC#等で考えられる概念。ボックス化においては、ヒープ上に新しく領域を確保し、そこに値型のデータをコピーする操作が生じるため、単純な型変換よりコストが掛かる。
  • オブジェクト指向できていますか?

    3. 自己紹介 1992年~1997年 某ゲーム会社 プログラマ SFC,GB,PS1,N64のゲーム開発経験 1998年~現在 日工学院八王子専門学校 @mozmoz1972 専任講師 プログラミング教育を中心に担当 twitterもfacebookも実名です。よかったらフォローしてください。

    オブジェクト指向できていますか?
    yowano
    yowano 2014/02/01
    オブジェクト思考についてだけでなく、複雑な処理をSTLの関数や三項演算子を使って綺麗に書こう、という話もアリ。
  • C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!

    Cが全然分からないころの話。 javaのように1クラス1ファイルに書かないのはなんで? メンバがポインタばっかりなのはなんで? という疑問を持ちながらコーディングしてるともやもやして嫌でした。 もやもやがいやなのでjava風に書いていたら当然のように詰まりました。 ポインタじゃなかったらメモリが大変なことになるだろうが! というのは最もなんですけど、じゃ小さいプログラムならありなのか?スマートポインタ使えばいいのか?と言うとそうでもない。 今日書いてみたいのは、クラスは相互参照がめんどくせぇから分割しろ。そして同じ理由でメンバ変数はポインタにしとこうぜ、というお話。 相互参照の解決 AクラスがBクラスを使って、BクラスがAクラスを使う。 こういう状態を相互参照とか相互includeとか言うと思う。 javaは何でもないことだけど、C++はこれを簡単には許してくれない。 相互参照の解決方法に

    C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!
    yowano
    yowano 2014/01/30
    前方参照、循環インクルード、不完全クラスのあたりの面倒な話のまとめ。
  • 2004-06-05

    CRTPについてちまちま書いていたのをまとめてみました. CRTP(Curiously Reccursive/Reccuring Template Pattern)とは以下のように基底クラスのテンプレート引数として自分自身を代入するテクニックのことを指します. template class Base{/*.....*/}; class C : public Base{/*.....*/}; よく見かけるパターンなので,これがどういう使われ方をしているかを適当にまとめてみました. あるクラスの機能の一部を変えてコードの再利用を行う場合,変えたい機能を提供するメンバ関数を仮想関数にしてそれを派生クラスでオーバーライドするのが通常の方法ですが,CRTPを使えば仮想関数を用いずに行うことができます. 自分で何か良さそうな例を書こうと思ったのですが,あんまり適切な例が思い浮かばないので,このCRTP

    2004-06-05
    yowano
    yowano 2013/12/22
    CRTPとは、基底クラスのテンプレート引数に自分自身の型を代入するテクニック。仮想関数を用いずにコードの再利用を行ったり、特定の実装の半自動化を行ったり、コンセプトの不整合を検知できるようにしたり。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    yowano
    yowano 2013/11/06
    CSampleクラスのメンバの operator int() は、int型を必要としている文中で、CSample型が使われているときに呼び出される。
  • 実行時型情報

    オブジェクトの型を知る C++のようなオブジェクト指向言語では、ポリモーフィズムをサポートしています オーバーライドで知ったように、場合のよっては実行されるまで性質がわからないオブジェクトが存在します この柔軟性はプログラムの効率に非常に大きな影響を与えます しかし、実行中に現在のオブジェクトの型を知る必要があるケースもあります といって、コンパイル時にオーバーライドされた仮想関数の型を知ることはできません そこで実行時型情報という機能を用いて、実行中にその型を調べる必要があります 実行時型情報は RTTI(Run-Time Type Identification) とも呼ばれます この機能を用いることで、ポリモーフィッククラスの型の操作などが動的に行えます 実行時型情報を得るには typeid 演算子 を用います この演算子は const type_info & を返します type_i

    yowano
    yowano 2013/10/25
    オブジェクト(変数など)の型を知ることができるtypeid演算子の解説。
  • C++: 水面下の仕組み - Microsoft Visual C++ Web Site

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    C++: 水面下の仕組み - Microsoft Visual C++ Web Site
    yowano
    yowano 2013/10/11
    C++のクラスやそのメンバの実装の解説。単純な関数や仮想関数、単一継承や多重継承などでどの程度オーバヘッドに違いが出るかについて記述。ざっと見た感じでは、多用する頻度の低いものほど遅いが、誤差程度。
  • アロー演算子のオーバーロードの注意点 - (void*)Pないと

    アロー演算子をオーバーロードして別のオブジェクトのポインタを返す処理があるとします。 以下のような感じです。 #include <iostream> using std::cout; using std::endl; class CMember { public: void output () { cout << "CMember::output" << endl; } }; class CClass { private: CMember* m_pCmember; public: CClass () { m_pCmember = new CMember; } ~CClass () { delete m_pCmember; } // アロー演算子をオーバーロードして別のオブジェクトを返す CMember* operator->() { return m_pCmember; } void ou

    アロー演算子のオーバーロードの注意点 - (void*)Pないと
    yowano
    yowano 2013/10/06
    クラスのアロー演算子をオーバーロードしても、その『クラスのポインタ』のアロー演算子の挙動が変わるわけではない。そのため意図した挙動にするには、(*そのクラスのポインタ)->メンバ; とする必要がある。
  • 20章 constメンバ変数の初期化 - (void*)Pないと

    http://www.geocities.jp/ky_webid/cpp/language/020.html C++のconstには状況よって様々な効果があるので少しややこしいです。 とりあえずひとつずつ理解していきたいと思います。 まずはC言語的なconstについてですが、これは単にその変数、もしくはその変数が参照している値を変更不可にすることができます。 const int i = 100; // iの値を変更できない int* const p; // pの値を変更できない const int* p; // pが指している値を変更できない const int* const p; // pの値を変更できなくて且つ指してる値も変更できない C++ではこれ以外にconstの役割がかなり増えました。 ひとつずついきましょう。 まずはメンバイニシャライザについてです。 メンバ変数にconstを適

    20章 constメンバ変数の初期化 - (void*)Pないと
  • はてなブログ | 無料ブログを作成しよう

    わたし的棚ぼた一万円選書 急に千葉さんに手渡された封筒、開けてみたら1万円札が1枚。何ごとかと思えば、同期の出張を代わったお礼をもらったらしい。 「葵はワンオペで育児してくれたから」と半分わけてくれました。 泡銭の1万円 これはもう、わたし的1万円選書をしろという思し召しなのでは……

    はてなブログ | 無料ブログを作成しよう
    yowano
    yowano 2013/04/23
    ポインタに関する解説の端的なまとめと、ポインタを利用したプログラム、実体を利用したプログラムの速度の比較。実体で作成した物をdeleteする、2回deleteするとエラーになるということの具体例。
  • C++初心者です。 とんちんかんな質問をしていたらすみません。…

    C++初心者です。 とんちんかんな質問をしていたらすみません。 A_file.cppとB_file.cppというファイルがあり、それぞれの中でAとBというクラスを定義していると仮定します。 このとき、クラスAのメンバ変数としてBのインスタンスを持たせる場合、ポインタとして定義する方法(以下ソースのmember_pointer_B)と実体を定義する方法(以下ソースのmember_B)があると思いますが、これらの違い(なぜこのような2つの方法があるのか、そもそも言ってることがおかしいとか、使い方が違うとか、メリット・デメリットとか)を教えて下さい。 // ソース class A { int numberA; int numberAA; B* member_pointer_B; // ポインタの定義 B member_B; // 実体の定義 } 宜しくお願い致します。

    yowano
    yowano 2013/04/23
    ポインタがわかりやすく解説されている記事。
  • オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名hoge;」を書... - Yahoo!知恵袋

    オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名 hoge;」 を書くだけで、インスタンス生成と初期化(newの処理)をしてくれればいいのに。 オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名 hoge;」 を書くだけで、インスタンス生成と初期化(newの処理)をしてくれればいいのに。 例えば、 Class Dog { 略 } としてDogを定義して、コードの中で Dog pochi; と書くだけで、pochiインスタンスを生成(コンストラクタの実行)をしてほしいのですが、なぜ pochi = new Doc() みたいに、別途書かなければいけないのでしょうか。

    オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名hoge;」を書... - Yahoo!知恵袋
    yowano
    yowano 2013/04/23
    newを使わなかった場合、同一スコープ内でしかそのオブジェクトを使えず、開放も逐次行われる。newを使った場合、メモリが動的に確保されるので、インスタンスが消失せず使い続けられる。ただし開放は自分で。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    yowano
    yowano 2013/04/22
    静的メンバ変数はスコープを限定されたグローバル変数のようなイメージであり、宣言した場合、その実体の定義をクラス定義の外側に記述する。静的メンバ関数からは、静的でないメンバ変数・関数を呼び出せない。
  • c++静的クラスについて。 - staticclassclassname{inta;voidfunc();.....};等と宣言すれば... - Yahoo!知恵袋

    c++ 静的クラスについて。 static class classname { int a; void func(); ..... }; 等と宣言すれば、classnameクラスのメンバは変数も関数もすべてstaticの属性を帯びると思っていたのですが、通常のクラス内でstatic変数を宣言した時のように、クラス外で再宣言する必要がないのはなぜですか? そういうもんだからなのか、それとも実はstatic class内のメンバすべてがstaticであるということが思い違いなのか。。。 ご回答よろしくお願い致しますm(_ _)m k032yfさん 確かにそうなんですが... 「static class内の関数にスコープ解決演算子をあてたclassname::func() = グローバル関数func()」という認識で用いると、「静的でないメンバ参照は特定オブジェクトを基準にした相対参照で」という

    c++静的クラスについて。 - staticclassclassname{inta;voidfunc();.....};等と宣言すれば... - Yahoo!知恵袋
    yowano
    yowano 2013/04/22
    C++には、C#に存在する『静的クラス』という概念が(標準のC++処理系には)存在しないらしい。この話とは無関係で全く余談ではあるが、静的オブジェクトは存在する。
  • C++構造体

    構造体って? C 言語で、いくつかの変数をひとまとまりにしたものを構造体といいます。例えば、下のように struct を使って定義します。 typedef struct Item { int code; /* 商品コード */ int name; /* 商品名 */ int price; /* 価格 */ } ITEM, *LPITEM ; 商品コードと商品名と価格を管理する場合、code, name, price の変数をそれそれ作るよりも商品( Item) でひとまとめすることでプログラムがわかりやすくなります。こういったまとまったデータをレコードともいいます。プログラムが小さいと大げさなように感じされますが、複雑になるにまし、struct のありがたみがわかります。 では C++ の構造体はというと、同じように使えます。C++ はCのソースコードをそのままコンパイルできるようになって

    yowano
    yowano 2013/04/22
    C++における構造体とクラスは同一のもの。class キーワードを struct キーワードに置き換えている。構造体として宣言しても、メンバ関数を持つことはもちろん、継承すらもできる。ただしデフォルトのアクセス修飾子が違う
  • 静的メンバー

    概要 静的メンバー(static member)とは、 特定のインスタンスにではなく、クラスに属するフィールドやメソッドのことです。 そのため、静的変数のとこをクラス メンバーとも呼びます。 (クラス変数という呼び名の方が意味合い的には正しいのですが、 C言語から派生したというC#の歴史的な背景のため、静的変数という呼び方をします。) 「静的」という言葉は、各種メンバー(フィールド、メソッド、プロパティなど)それぞれに対して、静的フィールド、静的メソッド、静的プロパティ、… などという使い方もします。 また、静的メンバーとの区別を明確にしたい場合には、通常のメンバー変数のことをインスタンス メンバーと呼びます。 ポイント 静的メンバー: この呼び方は歴史的なもので、実際にはクラス メンバー(クラス メソッド、クラス フィールド)と呼ぶ方がいいかも。 static キーワードをつけると静的メ

    静的メンバー
    yowano
    yowano 2013/04/21
    静的変数・静的メソッドは、数学関数などの、インスタンスを持つ必要のない関数を定義する場合にも使います。静的なメンバーしか持たない静的クラスもある。静的メンバの初期化などは静的コンストラクタでやる。
  • staticメソッドにするかどうかの判断 - BIGLOBEなんでも相談室

    yowano
    yowano 2013/04/21
    プログラム実行時、Java仮想マシンは、まずクラスをメモリにロードし、「クラスというオブジェクト」を作る。そして、その内容をコピーして「インスタンスというオブジェクト」を作る。どちらもオブジェクトだ。
  • Objective-C入門その7:アクセサメソッドをマスターする|サルにもできるiPhoneアプリの作り方

    サルにもできるiPhoneアプリの作り方使うだけじゃもったいない! iPhoneをとことんに遊び倒すために「誰でも」「簡単に」「自分だけの」アプリを作れるようになるための、とっておきのノウハウを教えます。 さぁアナタもご一緒に。世界に1つだけのオリジナルアプリを作りましょう!チャレンジブログ/エンジニア 携帯でもサルでき!Objective-C入門その7:アクセサメソッドをマスターするObjective-C入門 今回はObjective-C 2.0から実装された新機能についてのお話です。 前回まで、クラス、インスタンス変数、メソッドと、宣言シリーズについてお話ししてきました。 もう1回復習したい方はこちらを読んでくださいね。 Objective-C入門その4:クラス宣言をマスターする Objective-C入門その5:インスタンス変数宣言をマスターする Objective-C入門そ

  • クラスオブジェクトの配列を使うときの注意点 - ソフトウェアエンジニア現役続行

    int型の配列を使うときは以下のようにします。これは問題ないですね。 int[] array = new int[10]; // (1) しかし自分で定義したクラスのオブジェクトの配列を使う場合は、同じようにしてもうまくいきません。 class NewClass{ int a; int b; } public static void main(String[] args) { NewClass[] dim = new NewClass[3]; // (2) dim[0].a = 1; dim[0].b = 10; dim[1].a = 2; dim[1].b = 20; dim[2].a = 3; dim[2].b = 30; } (1)と同様に(2)と書いたのに、これを実行するとNull Pointer Exceptionが発生してしまいます。 調べたところ、(2)は、オブジェクトを入れ

    クラスオブジェクトの配列を使うときの注意点 - ソフトウェアエンジニア現役続行
    yowano
    yowano 2013/04/17
    newでインスタンスを入れるための配列を作ったあとに、次はfor文を利用しnewでインスタンスを生成、配列にインスタンスを格納と、一つずつやっていかなければならない