Folioscope

“C/C++” タグのついた記事

  • Qt Creatorで名前空間内のクラスを生成する

    Qt Creatorのクラスウィザードを使ってクラスを作る場合,名前空間に属するクラスもサクッと作ることができます.方法は簡単,クラスウィウィザードのクラス名に,スコープ解決演算子::のように名前空間をクラス名の前につけて,<namespace identifier>::<class identifier>のようにします. 例えばhoge::fuga::piyoのようにすると,次のようなコードを生成します. #ifndef HOGE_FUGA_PIYO_H #define …

  • constなメンバ関数の関数ポインタ

    次のようなクラスの宣言があります. classMyClass { public: void nonconstFunc() {}; void constFunc() const {}; }; const修飾子がついていないメンバ関数nonconstFunc()と,const修飾子がついているconstFunc()が宣言されています. const修飾子がついていないメンバ関数の関数ポインタは,調べればよく出てきます. void (MyClass::*func1)() = …

  • Qt Creatorの不思議実装

    MacOS版のQt Creatorはver.2.6からフルスクリーンに対応しています.しかしQtのライブラリにはMac OSのフルスクリーンのためのAPIが用意されておらず,Cocoaのライブラリを叩く必要があります.ではQt Creatorではどのような実装になっているのでしょうか. Qt Creatorのソースの$QTCREATOR/src/plugins/corepluginにメインウィンドウを始めとするコアのプラグインが入っています.このディレクトリのmainwindow.cppというフ …

  • boostのグラフ別,動作の違い

    boostにあるグラフライブラリのグラフの種類と動作の違いをまとめてみた. boostのグラフには辺の向きのタイプが3種類用意されている. directedS 有向グラフ. undirectedS 無効グラフ. bidirectionalS 有向グラフだが,双方向に走査できる. またboostには,ある頂点に隣接する辺や頂点を取得する関数がいくつかある. adjacent_vertex() ある頂点に隣接する全ての頂点を取得する in_edge() …

  • QMLでウィンドウっぽく

    QtQuickの開発が進んで, QMLも充実してきました. Introduction to Qt Quick | Documentation | Qt Developer Network Qtの方針も, (簡単な)UIはQMLで, 高度なロジックはC++でするという方針なようです. なにより綺麗なUIが容易に作成できるというのが大きな強みです. 今回はQMLで書いたものをウィンドウっぽいものを作ります. READMORE QMLの表示はQDeclarativeViewで行います. 普通 …

  • ポインタ変数に付加機能をつける

    変数はアライメントといって, ある一定の倍数のアドレスに変数領域が確保されます. アライメントは変数のサイズと同じことが多いですが, そう定義されているわけでもなく, 例外もあります. アライメントについては次のサイトが詳しいです. http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html 例えばアライメントが4の場合, 変数のアドレスは4の倍数となります. そのため変数のアドレスは下位2ビットが常に0となります. そこでこの下 …

  • 主婦でも出来る!? 算術演算子を使わない算術演算

    算術演算子を使わない加算, 減算, そして乗算をご紹介いたします まず初めに, ポインタの演算について説明すると 通常の算術演算の場合, c = a + b とすると, cには, aとbが加算された結果が代入されます. さて, これがポインタのアドレス値になると少し違ってきます pが何かの型のポインタとしたとき, r = p + q の場合, 加算されるのではなく, pからqだけポインタが進められます. これはどういう事かというと, 例えばpがint型のポインタとしたとき, rにはint型の大き …

  • 部長をノイローゼにする方法

    開発部長がバグを取れなくてノイローゼにする方法を紹介します この前の記事をちょこっと応用します http://d.hatena.ne.jp/ibenza/20110504 まず部長にincludeさせるヘッダファイルを作成します 今回はスペースの都合上, 必要なメンバ関数しか実装していません classNeuroseDouble { public: NeuroseDouble operator+(const NeuroseDouble &d) { NeuroseDouble n; …

  • C言語の関数の定義

    本日O’REILLYのRUNNING LINUXを読んでいたら, ちょっと気になるC言語の関数の定義がありました 次のソースをご覧ください #include <stdio.h> int add(a, b) int a; int b; { return (a + b); } int main() { printf("1 + 2 = %d\n", add(1, 2)); return 0; } 実行結果 1 + 2 = 3 どうやら関数の仮引数の宣言をそれぞれ …

  • 悪質なプリプロセッサ

    C/C++では, コードのコンパイル前に, プリプロセッサという処理をします #defineとか#includeとかです このプリプロセッサの特徴をいかしたソースコードをご覧ください C/C++の予約語などの字句解析を行う以前に, プリプロセッサの処理が行われるので, doubleやcharといった予約語もお構いなしに, charにで置換されてしまいます #include <stdio.h>#define double char #define int char int main() …

< Page 2 of 3 >