12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
ブログは単なるメモ帳となる予定。
早速導入してみる。
- 製品情報からドライバ、SDKをダウンロード、インストールして再起動する。
- 同ページからSample.exeをダウンロードし、ソフトウェア説明書に従い動作を確認する。
まず以下の2つのソフトをインストールする。
- それぞれを解凍する。
- BonDriver_PT1.dllをTVTest.exeがあるディレクトリにコピーする。
- TVTest.exeを実行すると、チャンネルスキャンを促すメッセージが出るのでそのままチャンネルスキャンを行う。
- 左下の部分でチャンネルを選択できる。エラーなどが出るチャンネルがないか確認する(EやSの値が増え続けないか)。
クラスの継承とコンストラクタ、デストラクタ
クラスを継承すれば、当然コンストラクタやデストラクタも継承される。つまり、派生クラスのオブジェクトを生成すれば、派生クラスのコンストラクタと基本クラスのコンストラクタの両方が実行される。デストラクタも同様である。
そのコンストラクタの実行順序は「基本クラス→派生クラス」の順である。派生クラスのコンストラクタは基本クラスの初期化も含んでいるため、基本クラスの後に実行される。何も記述しなくても基本クラスのコンストラクタは自動実行されるが、基本クラスのコンストラクタに引数を与えたい場合には、初期化リストの部分に記述する。
class Dimension2 : public Dimension1{ public: Dimension2() : Dimension1() { // ここで基本クラスのコンストラクタ呼び出し } }
一方、デストラクタの実行順序は「派生クラス→基本クラス」の順に実行される。これも、派生クラスの後処理が基本クラスのメンバに依存することがあることを考えれば自然。
クラスの継承について、最初に本で読んだときによく分からずじまいだった。しかも、その後、クラスの継承を使うこともなくここまできてしまった。今回ちょっと使おうかなと思ったので改めて本を読んでみたが、やはりよく分からない。ということでプログラムを作っていろいろやってみた。
今回は適当に以下のようなクラスを使ってみた。
class Dimension1{ private: int x; void privateSet(int a){ x = a; } protected: void protectedSet(int a){ x = a; } public: void publicSet(int a){ x = a; } int getX(){ return x; } }; class Dimension2 : public Dimension1{ private: int y; protected: public: void set(int a, int b){ publicSet(a); // protectedSet(a); // privateSet(a); y = b; } int getY(){ return y; } };
クラスの継承というのは、他のクラスを内包するようなクラスを作ることである。内包されているクラスを基本クラス、内包しているクラスを派生クラスという。
図:クラスの継承の概要
クラスの継承は以下のように記述する。
class Dimension2 : public Dimension1{};
クラスのメンバのアクセス制御と同様に、クラスの継承にもprivateな継承、protectedな継承、publicな継承がある。上記の継承はpublicな継承である。privateな継承は以下のように記述する。
class Dimension2 : private Dimension1{};
派生クラスのメンバ関数からは、基本クラスのprotectedなメンバ、およびpublicなメンバにアクセスできる。これは継承の種類によらない。
一方、派生クラス外からの基本クラスのメンバ関数へのアクセスは、継承の種類によってさらに制限される。
図・privateな継承
図・protectedな継承
図・publicな継承
いろいろ書いたけどあってんのかな? 次もクラスの継承を少し書く予定。
だんだん追い詰められていきますなあ。
後で読むメモ:
向聴数計算アルゴリズム
再帰抜き出しによるシャンテンチェックアルゴリズム
void display(void){ // 全ピクセルクリア glClear(GL_COLOR_BUFFER_BIT); // 白色、幅0.8の方形 glColor3f(1.0, 1.0, 1.0); glBegin(GL_POINTS); glVertex2f(0.1, 0.1); glVertex2f(0.9, 0.9); glEnd(); glPointSize(3.0); glBegin(GL_POINTS); glVertex2f(0.9, 0.1); glVertex2f(0.1, 0.9); glEnd(); glPointSize(1.0); // 赤色、幅0.6の方形 glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); glVertex3f(0.2, 0.2, 0.0); glVertex3f(0.8, 0.2, 0.0); glVertex3f(0.8, 0.8, 0.0); glEnd(); glLineWidth(3.0); glBegin(GL_LINE_STRIP); glVertex3f(0.8, 0.8, 0.0); glVertex3f(0.2, 0.8, 0.0); glVertex3f(0.2, 0.2, 0.0); glEnd(); glLineWidth(1.0); // 緑色、幅0.4の方形 glColor3f(0.0, 1.0, 0.0); glLineStipple(1, 0xAAAA); glEnable(GL_LINE_STIPPLE); glBegin(GL_LINE_STRIP); glVertex3f(0.3, 0.3, 0.0); glVertex3f(0.7, 0.3, 0.0); glVertex3f(0.7, 0.7, 0.0); glEnd(); glLineStipple(2, 0xAAAA); glBegin(GL_LINE_STRIP); glVertex3f(0.7, 0.7, 0.0); glVertex3f(0.3, 0.7, 0.0); glVertex3f(0.3, 0.3, 0.0); glEnd(); // 青色、幅0.2の方形 glColor3f(0.0, 0.0, 1.0); glLineStipple(2, 0xA448); glEnable(GL_LINE_STIPPLE); glBegin(GL_LINE_STRIP); glVertex3f(0.4, 0.4, 0.0); glVertex3f(0.6, 0.4, 0.0); glVertex3f(0.6, 0.6, 0.0); glEnd(); glLineWidth(3.0); glLineStipple(3, 0xAAAA); glBegin(GL_LINE_STRIP); glVertex3f(0.6, 0.6, 0.0); glVertex3f(0.4, 0.6, 0.0); glVertex3f(0.4, 0.4, 0.0); glEnd(); glDisable(GL_LINE_STIPPLE); glLineWidth(1.0); glFlush(); }【実行例】
- ■void glPointSize(GLfloat size);
- 点のサイズを変更する。
- ■void giLineWidth(GLfloat width);
- 線の幅を変更する。
- ■void glLineStipple(GLint factor, GLushort pattern);
-
点線のパターンを指定する。
factorはpatternの長さを拡大する。例えばpatternが010101でfactorが2であれば、これはpatternが001100110011であることと同値である。 - ■void glEnable(GLenum cap);
- 機能を有効にする。
- ■void glDisable(GLenum cap);
- 機能を無効にする。
- ■GLboolean glIsEnabled(GLenum cap);
- 機能が有効であるか問い合わせる。